使用edtftpj-***.jar上传下载中文问题的解决方案和注意点

FileTransferClient ftpClient = null;
        try {
            ftpClient = new FileTransferClient();
            // set remote host
            ftpClient.setRemoteHost(FTPAddress);
            ftpClient.setRemotePort(portInt);
            ftpClient.setUserName(FTPAccount);
            ftpClient.setPassword(FTPPwd);
            //注意:下面红色的部分必须写在connect之前,因为做connect的时候会到ftpClient对象的设置参数进行赋值。
            ftpClient.getAdvancedSettings().setTransferBufferSize(2048);
            ftpClient.getAdvancedSettings().setTransferNotifyInterval(5000);
            ftpClient.getAdvancedSettings().setControlEncoding("GBK");
            ftpClient.connect();
            ftpClient.changeDirectory("/");
            ftpClient.setDetectContentType(true);
            ftpClient.setContentType(FTPTransferType.BINARY);
            String[] names = ftpClient.directoryNameList();
            for (String oName : names) {
                log.debug("file is:" + oName);
            }
            for (String kngAttachName : kngAttachs) {
                int i = kngAttachName.lastIndexOf(".");
                // 附件列表路径中不存在"."
                if (i != -1) {
                    // 获取附件文件类型
                    String fileType = kngAttachName.substring(i + 1, kngAttachName.length());
                    String localFileName = this.getCSPId() + "." + fileType;
                    File file = new File(fileServerPath);
                    if (!file.exists()) {
                        file.mkdirs();
                    }
                    String path = fileServerPath + "/" + localFileName;
                    File file1 = new File(path);
                    file1.createNewFile();
                    FileOutputStream fos = new FileOutputStream(file1);
                    if (log.isDebugEnabled()) {
                        log.debug("Local filepath is:" + path);
                        log.debug("Remote host is:" + ftpClient.getUserName() +                    "@" + ftpClient.getRemoteHost() + ":" +                               ftpClient.getRemotePort() + "@" + ftpClient.getRemoteDirectory());
                        log.debug("kngAttachName is:" + kngAttachName);
                    }
                    String kngAttachName_ecode = new String(kngAttachName.getBytes(), "UTF-8");
                    if (ftpClient.exists(kngAttachName_ecode)) {
                        final int BUFFER_SIZE = 2048;
                        final byte[] buffer = new byte[BUFFER_SIZE];
                        int bytesRead = 0;
                        FileTransferInputStream inputStream = null;
                        try {
                            inputStream = ftpClient.downloadStream(kngAttachName_ecode);
                            while ((bytesRead = inputStream.read(buffer, 0, BUFFER_SIZE)) != -1) {
                                fos.write(buffer, 0, bytesRead);
                            }
                            fos.flush();
                        }
                        catch (IOException e) {
                            if (log.isDebugEnabled()) {
                                log.error("知识附件下载到文件" + kngAttachName + "服务器ftp发生异常" +                       e.getMessage(), e);
                            }
                            String message = new StringBuilder("the kngAffix ").                    append(kngAttachName).append(" transFailed!").toString();
                            SoapUtil.recordLog("transFail", message);
                        }
                        finally {
                            if (inputStream != null) {
                                inputStream.close();
                            }
                            if (fos != null) {
                                fos.close();// MUST be closed to complete the transfer
                                IOUtils.closeQuietly(fos);
                            }
                        }
                    }
                    else {
                        log.error("经分知识(" + kngId + ")的附件(" + kngAttachName + ")不存在!");
                    }
                    // 知识附件对象
                    DataObject affixObject = new DataObjectSupport(                "com.huawei.csp.customization.kbs.domain", "c_kbs_kngAdjunctInfoEdit");
                    affixObject.setString("adjId", this.getCSPId());
                    affixObject.setString("kngId", kngId);
                    affixObject.setInt("versionNum", 0);
                    affixObject.setInt("adjClass", 2);
                    int j = kngAttachName.lastIndexOf("/");
                    if (j != -1) {
                        affixObject.setString("adjName", kngAttachName.substring(j + 1,                   kngAttachName.length()));
                    }
                    else {
                        affixObject.setString("adjName", kngAttachName);
                    }
                    affixObject.setString("adjPath", kngAttachPath + "/" + dateDirPath                   + "/" + localFileName);
                    affixObject.setString("adjType", fileType);
                    affixObject.setInt("adjSize", 0);
                    String staffId = this.tableDataAccessService.                getSystemParam("107", "107993").getValue();
                    affixObject.setString("creatorId", staffId);
                    affixObject.setString("modifierId", staffId);
                    affixObject.setString("hostedCcId", "001");
                    affixObject.setInt("orderId", 1);
                    this.collectKngInterface.addKngAffix(affixObject);
                }
                else {
                    String message = new StringBuilder("the kngAffix file type error!").toString();
                    SoapUtil.recordLog("transFail", message);
                }
            }
            retInt = (0);
        }
        catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        finally {
            if (ftpClient != null && ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                }
                catch (IOException ioex) {
                    log.error(ioex.getMessage(), ioex);
                }
                catch (FTPException ftpEx) {
                    log.error(ftpEx.getMessage(), ftpEx);
                }
            }
        }

本文转自:http://blog.sina.com.cn/s/blog_5b254b7701014qbd.html

时间: 2024-12-29 16:05:56

使用edtftpj-***.jar上传下载中文问题的解决方案和注意点的相关文章

Java中实现文件上传下载的三种解决方案

第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream();// 把文件读入 String filePath = request.getRealPath(fileAddre);//取系统当前路径

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

javaweb-文件的上传下载

本文用到的jar包: 文件上传:commons-fileupload-1.2.1.jar; commons-io-1.4.jar; 本文需要掌握的知识:html+dom 1 文件的上传概述; 1.1 用户把本地的文件储存到服务器上,就是文件的上传; 1.2 实现文件的上传(目前而言要使用第三方jar包); 1.2.1 jspSmartupload; 适用范围:应用在jsp的模型一里(嵌入执行上传下载操作的JSP文件中)  ; 1.2.2 fileUpload; 来源:Apache commons

笔记:JDBC文件上传&下载

一.上传下载实现原理 文件的上传下载实现原理,如图: 上传原理: 1.客户端浏览器通过文件浏览框,选择需要上传的文件内容(其中包括文件路径和文件内容). 2.客户端浏览器通过上传按钮,将本地文件上传到浏览器. 3.服务器通过程序接收本地文件内容,并将其保存在服务器的磁盘中. 下载实现流程: 1.客户端浏览器通过点击下载按钮,将服务器保存的文件下载到本地磁盘. 2.服务器端通过程序将服务器文件响应给客户端. 二.文件的上传: * 分析实现步骤: * 客户端浏览器通过文件域选择本地要上传的文件. *

javaEE(10)_文件上传下载

一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输入项?    <input type=“file”>标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意:•必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据.•必须把form的enctype属值设为multipart/form-data.设置该值后,浏览

28、java文件上传下载、邮件收发

文件上传下载 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data FileUpload 文件上传功能开发中比较常用,apache也提供了文件上传组件! FileUpload组件: 1. 下载源码 2. 项目中引入jar文件

文件上传表单 上传文件的细节 文件上传下载和数据库结合

1 文件上传表单   1)上传文件的本质是文本复制的过程   2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写   3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如:     IE6:upfile=c:\aa\bb\a.JPG     非IE6: upfile=a.JPG   4)可以将form以MIME协议的方式将上传文件传递到服务端,服务端以二进制流的方式读写     代码:客户端form enctype="multipart/form-data&quo

JavaWeb实现文件上传下载功能实例解析

转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件