1.服务端:采用serv-u11.3版本的服务器管理工具作为ftp服务端
2.客户端:采用FTPClient 1.4.1组件作为客户端访问ftp服务器
我们在用FTPClient组件上传文件时,当上传的文件名为中文时,有以下几种情况:
一、当没有禁用serv-u服务端工具的上传下载编码时,即:
没有将域限制和设置里默认的opts-utf8禁止,在:域限制和设置---FTP设置选项卡---全局属性---高级选项---第三个多选框。
1.客户端代码中如果编码为:UTF-8,那么完全没有问题,中文命名的文件可以正常上传;参考以下代码:
/**
* FTP上传单个文件测试
*/
public static void testUpload() {
FTPClient ftpClient = new FTPClient()
FileInputStream fis = null
try {
ftpClient.connect("此处填写服务器IP")
ftpClient.login("用户名", "密码")
File srcFile = new File("F:\\路由器配置.txt")
fis = new FileInputStream(srcFile)
//设置上传目录
ftpClient.changeWorkingDirectory("/admin/pic")
ftpClient.setBufferSize(1024)
ftpClient.setControlEncoding("UTF-8")//这里设置编码
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)
boolean temp = ftpClient.storeFile(new String("路由器配置.txt".getBytes("UTF-8"),"iso-8859-1"), fis)//编码转换
System.out.println("temp-------"+temp)
} catch (IOException e) {
e.printStackTrace()
throw new RuntimeException("FTP客户端出错!", e)
} finally {
IOUtils.closeQuietly(fis)
try {
ftpClient.disconnect()
} catch (IOException e) {
e.printStackTrace()
throw new RuntimeException("关闭FTP连接发生异常!", e)
}
}
}
2.客户端代码中如果编码为:GB2312,可以上传,但是上传的文件名为乱码,代码同上,改变红颜色的字的编码为GB2312即可;
二、一、当不选serv-u服务端工具的上传下载的默认编码时,即:
在:域限制和设置---FTP设置选项卡---全局属性---高级选项---第三个多选框不要勾选时;
1.客户端代码中如果编码为:UTF-8,文件不能上传,代码中,temp变量为false
2.客户端代码中如果编码为:GB2312,文件正常上传,并且不为乱码,代码中,temp变量为true
综合上述:将ftp服务器默认编码禁用,并且客户端代码中以GB2312 编码上传并转化较为合理,解决中文文件名的问题;另外,还有多种情况没有举例,大家可以测试一下,以便了解更为透彻。
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri)request.Method = WebRequestMethods.Ftp.Rename//设置方法为重命名FtpWebResponse response = (FtpWebResponse) request.GetResponse()看msdn文档吧,有例子,又是中文的。想深入一点的话就用一个网络监控软件,如iris,看看tcp包和别人的客户端软件发出的有何不同,这实际上就是对ftp协议的一个认识。1、How To Use FTPWebRequest
http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/17a3abbc-6144-433b-aadd-1f776c042bd5/
2、FTPWebRequest.RenameTo Error in .NET v4.0 这篇最适合你了
http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/0e5718a4-8b26-4bc4-b9e6-c4faebfc66ae
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)