FTP上传文件名称中文乱码问题

这个问题昨天研究了一下午,以为解决了,今天早上突然发现其实并没有解决,所以花了一早上时间又查阅了相关资料后 现在才算彻底的解决。要注意:昨天我单纯的把filename转成new String(filename.getBytes("GBK"), "ISO-8859-1"),的确发现上传后中文不再乱码了,于是我以为我把这个问题解决了,但是后来发现如果ftp服务器中的设置就已经是utf-8的编码的话还是会继续报错的,所以我又上网找了些资料发现有个命令可以设置ftp支持UTF-8,就是这个ftpClient.sendCommand("OPTS UTF8", "ON"),所以就试了一下然后文件名字这样new String(filename.getBytes(LOCAL_CHARSET), SERVER_CHARSET),喏,这回乱码问题彻底解决了,下面是代码:

public class FTPFileUtil {
//此为FTP的配置文件信息
static Map<String, String> eip = UtilProperties.getPropretiesByKey();
//本地字符编码
static String LOCAL_CHARSET = "GBK";

// FTP协议里面,规定文件名编码为iso-8859-1
static String SERVER_CHARSET = "ISO-8859-1";

public static FTPClient ftpClient = null;

/***
* 初始化ftp服务器
* @author panfei
* @date 2018年7月18日
*/
public static void initFtpClient() {
ftpClient = new FTPClient();
try {
ICFLoggerUtils.info("connecting...ftp服务器:"+ eip.get("ftp.username") +":"+ eip.get("ftp.port"));
//连接ftp服务器
ftpClient.connect(eip.get("ftp.uploadpath"), Integer.valueOf(eip.get("ftp.port")));
//登录ftp服务器
ftpClient.login(eip.get("ftp.username"), eip.get("ftp.password"));
//是否成功登录服务器
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
ICFLoggerUtils.info("connect failed...ftp服务器:"+eip.get("ftp.username")+":"+eip.get("ftp.port"));
}
ICFLoggerUtils.info("connect success...ftp服务器:"+eip.get("ftp.username")+":"+eip.get("ftp.port"));
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
LOCAL_CHARSET = "UTF-8";
}
ftpClient.setControlEncoding(LOCAL_CHARSET);
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}

/*****
* 上传ftp服务器
* @param pathname FTP服务器保存目录
* @param fis 流
* @param filename 要删除的文件名称
* @return
* @author panfei
* @date 2018年7月18日
*/
public static boolean createFile(String pathname, InputStream fis, String filename){
boolean flag = false;
try {
ICFLoggerUtils.info("开始上传文件");
initFtpClient();
ftpClient.makeDirectory(pathname);
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(pathname);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
flag = ftpClient.storeFile(new String(filename.getBytes(LOCAL_CHARSET),
SERVER_CHARSET), fis);
if(flag){
ICFLoggerUtils.info("文件上传成功!");
}else{
ICFLoggerUtils.info("文件上传不成功!");
}
fis.close();
ftpClient.logout();
} catch (Exception e1) {
ICFLoggerUtils.info("上传文件失败");
e1.printStackTrace();
}finally {
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != fis){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}

/***
* 删除文件
* @param pathname FTP服务器保存目录 *
* @param filename 要删除的文件名称 *
* @return
* @author panfei
* @date 2018年7月18日
*/
public static boolean deleteFile(String pathname, String filename){
boolean flag = false;
try {
ICFLoggerUtils.info("开始删除文件");
initFtpClient();
ftpClient.enterLocalPassiveMode();
//切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
flag = ftpClient.deleteFile(new String(filename.getBytes(LOCAL_CHARSET),
SERVER_CHARSET));
ftpClient.logout();
if(flag){
ICFLoggerUtils.info("删除文件成功!");
}else{
ICFLoggerUtils.info("删除文件失败!");
}
} catch (Exception e) {
ICFLoggerUtils.info("删除文件失败");
e.printStackTrace();
} finally {
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
}
return flag;
}

public static void main(String[] args) throws IOException {
//InputStream inputStream = new FileInputStream("C:/Users/icfjk888/Workspaces/ICFInterfaceSrever-3.0/src/main/webapp/download/木兰.zip");
//createFile("tempDownload",inputStream,"木兰.zip");
//deleteFile("tempDownload", "木兰.zip");
}
}

原文链接:https://blog.csdn.net/pan_fei/article/details/81109635

原文地址:https://www.cnblogs.com/axin85/p/11741576.html

时间: 2024-08-01 20:36:54

FTP上传文件名称中文乱码问题的相关文章

解决ASIHTTP setFile上传文件后中文乱码问题

这问题困扰我好长时间,不上传文件就不是乱码,传文件就乱码,并且Android好使;最后联合中间件后台/Android客户端/IOS客户端,共同上传比较,最后在后台捕捉时发现,Android的提交输出格式为: --PfyXAYcEcmd3GqueWEk6hXUWXfm-KrG4XNEQContent-Disposition: form-data; name="companyName"Content-Type: text/plain; charset=UTF-8Content-Transf

Axure+WinSCP上传文件显示中文乱码

问题描述 用axure制作完原型后输出html文件,上传到阿里云服务器上供其他人浏览,通过winscp上传后,公网访问提示404. 环境 云服务器 Centos7.2 web服务器 nginx 问题原因 上传到服务器的文件为中文名称.html,所以显示乱码! 找原因遇到的各种坑 1. 第一时间感觉是nginx配置问题,查看nginx.conf 中 charset utf-8 已经设置: 2. 操作系统不是中文字符集,搜了一下,(这里网上写答案的朋友还是要自己试一试,不要都是照搬) 坑1,Cent

Java ftp 上传文件和下载文件

今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接:http://blog.csdn.net/yucaifu1989/article/details/51483118 为了方便大家对比,我吧文章代码偷了过来: import java.io.File; import java.io.FileInputStream; import java.io.Fil

再看ftp上传文件

前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在本地测试程序上传到ftp服务器一点问题都没有,奇怪的是当发布Web和ftp到同一个IIS下,上传文件时程序直接卡死,然后页面卡死,后来我又发现把Web和ftp分开发布在两台机器上问题又得到解决,所以当时放弃了这个方案. 再看ftp上传文件 前几天偶然看到Wolfy写到一个项目总结,其中提到了用Ser

C# FTP上传文件至服务器代码

C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件</param> /// <param name="targetDir">目标路径</param> /// <param name="hostname">ftp地址</param&g

C++实现向FTP上传文件

连接 CInternetSession *m_pInetsession; CFtpConnection *m_pFtpConnection; m_pInetsession=new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS); try { m_pFtpConnection=m_pInetsession->GetFtpConnection("127.0.0.1",NULL,NULL,38); Messa

FTP上传文件提示550错误原因分析。

今天测试FTP上传文件功能,同样的代码从自己的Demo移到正式的代码中,不能实现功能,并报 Stream rs = ftp.GetRequestStream()提示远程服务器返回错误: (550) 文件不可用(例如,未找到文件, 百度查找原因: 1.说文件权限: 2.路径是否正确: 3.路径是不是要加“@” 还有其他各类说法,逐一检查未发现错误,关键是同一个文件同样代码,一个程序可以正确完成上传,一个跳异常. 后来突然想到拷贝代码时FTP类提示using System.Linq;命名空间错误.

本地虚拟机中匿名ftp上传文件失败的问题

在10.10.50.230中新建了一个匿名的ftp服务器,结果在10.10.50.241中上传文件时提示: local: README.txt remote: /var/ftp/pub/upload 227 Entering Passive Mode (10,10,50,230,117,8). 553 Could not create file.   由于搭建步骤是完全按照标准文档建立的,vsftp.conf的设置应该没有问题,检查:getsebool -a|grep ftp 发现: allow

FTP上传文件速度太慢怎么办?

用户在建设网站时必不可少的一类工具就是文件传输工具.通过客户端和主机之间的文件交互,及时上传补丁文件.下载日志文件等,确保网站的正常稳定运行.但是也有不少用户反映使用FTP上传文件速度太慢,这是什么原因呢?FTP上传文件速度太慢怎么办?一.为什么FTP上传文件速度太慢? 运维人员在日常的工作中会使用FTP软件上传补丁.升级包.下载数据.日志等数据.FTP上传与下载速度慢,严重的影响运维人员的工作效率,与此同时一味的指责网络提供商,其实有些以偏概全. 为什么FTP上传文件速度太慢呢? FTP协议自