利用FTPClient上传的文件中中文名字乱码解决办法
2016-05-13 15:23
796 查看
添加下面这一段:
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
charSet = "UTF-8";
}
ftpClient.setControlEncoding(charSet);
public static boolean upload(String ip, String userName, String passWord,
int port, String charSet, String sourceFileUrl, String ftpGoalDir,
ArrayList<String> fileNameList) throws Exception {
// 上传不成功
boolean res = false;
// 创建一个连接FTP服务器对象
FTPClient ftpClient = new FTPClient();
// 创建一个文件写入流对象
FileInputStream fis = null;
try {
// 连接FTP服务器
ftpClient.connect(ip, port);
// 登录FTP连接
ftpClient.login(userName, passWord);
// 在ftp上创建同名文件夹
if (sourceFileUrl.substring(
sourceFileUrl.lastIndexOf(File.separator) + 1).length() > 0) {
ftpGoalDir = ftpGoalDir
+ File.separator
+ sourceFileUrl.substring(sourceFileUrl
.lastIndexOf(File.separator) + 1);
}
if (!isDirExist(ftpClient, ftpGoalDir)) {
boolean ff = makeDir(charSet, ftpClient, ftpGoalDir);
if (ff == false) {
throw new Exception("创建文件夹" + ftpGoalDir + "出错!");
}
}
for (int i = 0; i < fileNameList.size(); i++) {
// 创建文件对象
File srcFile = new File(sourceFileUrl + File.separator
+ fileNameList.get(i));
// 向FTP服务器写入文件
fis = new FileInputStream(srcFile);
if (i == 0) {
// 设置上传目录
boolean flag = ftpClient.changeWorkingDirectory(new String(
ftpGoalDir.getBytes(charSet), "ISO-8859-1"));
System.out.println(flag);
}
// 向目标服务器写入文件大小限制
ftpClient.setBufferSize(1024 * 1024);
//
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
charSet = "UTF-8";
}
ftpClient.setControlEncoding(charSet);
boolean flag = ftpClient.storeFile(
new String(fileNameList.get(i).getBytes(charSet),
"ISO-8859-1"), fis);
System.out.println(flag);
res = true;
fis.close();
}
System.out.println("upload successful!");
} catch (IOException e) {
throw new RuntimeException("FTP客户端出错!", e);
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return res;
}
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
charSet = "UTF-8";
}
ftpClient.setControlEncoding(charSet);
public static boolean upload(String ip, String userName, String passWord,
int port, String charSet, String sourceFileUrl, String ftpGoalDir,
ArrayList<String> fileNameList) throws Exception {
// 上传不成功
boolean res = false;
// 创建一个连接FTP服务器对象
FTPClient ftpClient = new FTPClient();
// 创建一个文件写入流对象
FileInputStream fis = null;
try {
// 连接FTP服务器
ftpClient.connect(ip, port);
// 登录FTP连接
ftpClient.login(userName, passWord);
// 在ftp上创建同名文件夹
if (sourceFileUrl.substring(
sourceFileUrl.lastIndexOf(File.separator) + 1).length() > 0) {
ftpGoalDir = ftpGoalDir
+ File.separator
+ sourceFileUrl.substring(sourceFileUrl
.lastIndexOf(File.separator) + 1);
}
if (!isDirExist(ftpClient, ftpGoalDir)) {
boolean ff = makeDir(charSet, ftpClient, ftpGoalDir);
if (ff == false) {
throw new Exception("创建文件夹" + ftpGoalDir + "出错!");
}
}
for (int i = 0; i < fileNameList.size(); i++) {
// 创建文件对象
File srcFile = new File(sourceFileUrl + File.separator
+ fileNameList.get(i));
// 向FTP服务器写入文件
fis = new FileInputStream(srcFile);
if (i == 0) {
// 设置上传目录
boolean flag = ftpClient.changeWorkingDirectory(new String(
ftpGoalDir.getBytes(charSet), "ISO-8859-1"));
System.out.println(flag);
}
// 向目标服务器写入文件大小限制
ftpClient.setBufferSize(1024 * 1024);
//
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
charSet = "UTF-8";
}
ftpClient.setControlEncoding(charSet);
boolean flag = ftpClient.storeFile(
new String(fileNameList.get(i).getBytes(charSet),
"ISO-8859-1"), fis);
System.out.println(flag);
res = true;
fis.close();
}
System.out.println("upload successful!");
} catch (IOException e) {
throw new RuntimeException("FTP客户端出错!", e);
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return res;
}
相关文章推荐
- itextPdf 可以写pdf文件,主要是文字的问题
- PHP与Java对比学习日期时间函数
- PHP将MySQL的查询结果转换为数组并用where拼接的示例
- Laravel课程表的数据库设计与实现
- php artisan 命令
- php 开发移动应用接口
- Laravel的DB类在哪
- ftp 客户端实现(1)--FTP格式
- php:PHPExcel导出excel表格
- Windows NTP服务配置
- PHP获取字符串长度之strlen和mb_strlen的区别
- 使用AbstractProcessor遇到的一些问题
- PHP语言 -- 发起流程
- PHP 基础函数(四)回调函数
- 使用AbstractProcessor如何根据类的注解,找到对应类的字段
- php webservice实例(转载)
- PHP简单实现无限级分类的方法
- 基础知识:四、 ContentProvider
- aop.php
- 记录一下xcache导致的php-fpm 502问题