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. Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  2. mysql update case when和where之间的注意事项

    在日常开发中由于业务逻辑较为复杂,常常需要用到UPDATE和CASE...WHEN...THEN...ELSE...END一起做一些复杂的更新.有时候因为对这几个字句理解得不透彻会带来很大的困扰.因此 ...

  3. iOS 和 Android 触摸事件传递

    先看文章,写得很好 ios 触摸事件传递 http://www.cnblogs.com/Quains/p/3369132.html 另外一篇 http://blog.csdn.net/yongyinm ...

  4. 修改Tomcat服务器的默认端口号

    tomcat服务器的默认端口号是8080,我们也可以修改为其他端口号,并且在没有启动Apache,IIS等占用80端口的web服务时,我们也可以设置为80端口,这样在生产中域名之后就可以不带端口号了, ...

  5. 为eclipse设置好看的代码主题

    eclipse的默认代码背景是白色,上个文章简单说了字体设置,这边主要介绍代码高亮的主题设置,打造更酷的编程界面.网上有文章说可以在设置里面逐一设置,但是比较麻烦,可以去网上下载现成的主题包,网址为: ...

  6. 一台机器开2个Tomcat修改端口号

    修改一个Tomcat端口号步骤:1.找到Tomcat目录下的conf文件夹2.进入conf文件夹里面找到server.xml文件3.打开server.xml文件4.在server.xml文件里面找到下 ...

  7. jQuery工具函数

    要点:1.字符串操作2.数组和对象操作3.测试操作4.URL 操作5.浏览器检测6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对象本身定义的方法,即全局性的函数.它的作 ...

  8. GCD的基本使用

    // // ViewController.m // gcd队列与函数 // // Created by 诠释 on 15/9/3. // Copyright (c) 2015年 诠释. All rig ...

  9. JUC回顾之-volatile的原理和使用

    1.计算机内存模型的相关概念 计算机在执行程序时,每条指令都是在CPU中执行的,在指令的执行过程中,涉及到数据的读取和写入.由于程序在运行的过程中数据是放在"主存"中的, 由于数据 ...

  10. adbWireless 简单教程

    adbWireless:无线使用ADB(siir.es.adbWireless) 下载: http://www.coolapk.com/apk/siir.es.adbWireless >> ...