使用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
使用edtftpj-***.jar上传下载中文问题的解决方案和注意点的更多相关文章
- python用ftplib上传下载中文报错解决
		python中的中文编码一直以来都是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?在python中提到unicode,一般指的是unicode ... 
- Java中实现文件上传下载的三种解决方案
		第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ... 
- java中文上传下载功能实现(自己测试项目)
		1.新建maven项目打war包 2.搭建springMVC框架 web.xml文件配置 <?xml version="1.0" encoding="UTF-8&q ... 
- Javaweb学习笔记——上传下载文件
		一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ... 
- servlet上传下载(任何格式的都可以)
		jar不能低于此版本,JDK1.6以上,否则户报错 <dependency> <groupId>commons-fileupload</groupId> <a ... 
- extjs插件开发上传下载文件简单案例
		前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例. 必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2. ... 
- JavaWeb实现文件上传下载功能实例解析
		转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ... 
- java web 文件上传下载
		文件上传下载案例: 首先是此案例工程的目录结构: 
- SpringMVC 上传下载 异常处理
		SpringMVC 上传下载 异常处理 上一章节对SpringMVC的表单验证进行了详细的介绍,本章节介绍SpringMVC文件的上传和下载(重点),国际化以及异常处理问题.这也是SpringMVC系 ... 
随机推荐
- 《ASP.NET MVC4 WEB编程》学习笔记------.net mvc实现原理ActionResult/View
			ActionResult ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回 ... 
- mysql 源码下载列表
			2013年11月16日 14:57:04 http://download.softagency.net/MySQL/Downloads/MySQL-5.5/ http://code.google.co ... 
- 使用php递归计算目录大小
			统计一个目录大小,因为不知道目录中子目录的深度,所以for循环很难实现,但是用递归调用很容易实现,只要统计出一个目录中所有文件的大小,那么每一次调用就可以了,随便建了个目录,建立一些文件,方法代码如下 ... 
- [Linux]   Linux进程PID散列表
			linux系统中每个进程由一个进程id标识,在内核中对应一个task_struct结构的进程描述符,系统中所有进程的task_struct通过链表链接在一起,在内核中,经常需要通过进程id来获取进程描 ... 
- windows设置java环境变量
			JAVA_HOME C:\Program Files\java\jdk1.6.0_38 path %JAVA_HOME%\bin; CLASSPATH .;%JAVA_HOME%\lib\dt.jar ... 
- md5sum 生成 经md5加密后的字符串
			➜ ~ echo -n 'admin' | md5sum 21232f297a57a5a743894a0e4a801fc3 - ➜ ~ md5sum -h md5sum: invalid option ... 
- Phoenix实现用SQL查询HBase
			博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ... 
- mysql优化总结
			SQL优化目的: 降低响应时间 直接影响用户体验度 降低资源使用率 主要体现在IO和CPU上,网络.内存消耗 优化原则: 1.IN子查询改成JOIN2.NOT IN子查询改成LEFT JOIN3.消除 ... 
- Andorid中的HAL
			参考文章: http://blog.csdn.net/luoshengyang/article/details/6567257 
- js选中当前菜单后高亮显示的导航条
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
