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

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

  1. python用ftplib上传下载中文报错解决

    python中的中文编码一直以来都是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?在python中提到unicode,一般指的是unicode ...

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

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  3. java中文上传下载功能实现(自己测试项目)

    1.新建maven项目打war包 2.搭建springMVC框架 web.xml文件配置 <?xml version="1.0" encoding="UTF-8&q ...

  4. Javaweb学习笔记——上传下载文件

    一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...

  5. servlet上传下载(任何格式的都可以)

    jar不能低于此版本,JDK1.6以上,否则户报错 <dependency> <groupId>commons-fileupload</groupId> <a ...

  6. extjs插件开发上传下载文件简单案例

    前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例. 必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2. ...

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

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  8. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  9. SpringMVC 上传下载 异常处理

    SpringMVC 上传下载 异常处理 上一章节对SpringMVC的表单验证进行了详细的介绍,本章节介绍SpringMVC文件的上传和下载(重点),国际化以及异常处理问题.这也是SpringMVC系 ...

随机推荐

  1. 《ASP.NET MVC4 WEB编程》学习笔记------.net mvc实现原理ActionResult/View

    ActionResult ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回 ...

  2. mysql 源码下载列表

    2013年11月16日 14:57:04 http://download.softagency.net/MySQL/Downloads/MySQL-5.5/ http://code.google.co ...

  3. 使用php递归计算目录大小

    统计一个目录大小,因为不知道目录中子目录的深度,所以for循环很难实现,但是用递归调用很容易实现,只要统计出一个目录中所有文件的大小,那么每一次调用就可以了,随便建了个目录,建立一些文件,方法代码如下 ...

  4. [Linux] Linux进程PID散列表

    linux系统中每个进程由一个进程id标识,在内核中对应一个task_struct结构的进程描述符,系统中所有进程的task_struct通过链表链接在一起,在内核中,经常需要通过进程id来获取进程描 ...

  5. windows设置java环境变量

    JAVA_HOME C:\Program Files\java\jdk1.6.0_38 path %JAVA_HOME%\bin; CLASSPATH .;%JAVA_HOME%\lib\dt.jar ...

  6. md5sum 生成 经md5加密后的字符串

    ➜ ~ echo -n 'admin' | md5sum 21232f297a57a5a743894a0e4a801fc3 - ➜ ~ md5sum -h md5sum: invalid option ...

  7. Phoenix实现用SQL查询HBase

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...

  8. mysql优化总结

    SQL优化目的: 降低响应时间 直接影响用户体验度 降低资源使用率 主要体现在IO和CPU上,网络.内存消耗 优化原则: 1.IN子查询改成JOIN2.NOT IN子查询改成LEFT JOIN3.消除 ...

  9. Andorid中的HAL

    参考文章: http://blog.csdn.net/luoshengyang/article/details/6567257

  10. js选中当前菜单后高亮显示的导航条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...