使用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系 ...
随机推荐
- 【Hibernate】Hibernate系列2之Session详解
Session详解 2.1.概述-一级缓存 2.2.操作session缓存方法 2.3.数据库隔离级别 2.4.持久化状态 2.5.状态转换 2.6.存储过程与触发器
- 【云计算】ubuntu下docker安装配置指南
Docker Engine安装配置 以下描述仅Docker在Ubuntu Precise 12.04 (LTS).Ubuntu Trusty 14.04 (LTS).Ubuntu Wily 15.10 ...
- Segment Tree Query I & II
Segment Tree Query I For an integer array (index from 0 to n-1, where n is the size of this array), ...
- poj 2709
http://poj.org/problem?id=2709 题意:就是那个老师需要n瓶颜色的墨水,和1瓶颜色的灰色的墨水,但是灰色的墨水没得卖,只能由三种颜色相同的墨水混合而成,但是3瓶50ML的墨 ...
- extern关键字总结
[本文链接] http://www.cnblogs.com/hellogiser/p/extern.html [extern 变量/函数] extern是C/C++语言中表明函数和全局变量作用范围(可 ...
- Ribbon_窗体_实现Ribbon风格的窗体
Ribbon_窗体_实现Ribbon风格的窗体 随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢? ...
- 2.python基础深入(元组、字符串、列表、字典)
一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...
- .net学习笔记----Asp.net的生命周期之一应用程序生命周期
Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...
- 在Android中让Preference的宽度占满整个屏幕的宽度
今天遇到一个问题,需要修改Preference的宽度,让其与屏幕宽度一致.搞了一上午. 终于发现Preference的这个尺寸是在PreferenceFrameLayout中设置的.通过下面这段代码, ...
- **对比$_POST、$GLOBALS['HTTP_RAW_POST_DATA']和file_get_contents('php://input')
最近在开发微信接口,又学到了一些新的技术点,今天就把学到的关于接收数据的技术点给简单的罗列下. public function __construct($token, $wxuser = ''){ $ ...