这阵子在弄ftp上传,看网上好多例子,试了试普通的文档都可以,但是照片,视频什么的都不能查看。看了这篇文章我豁然开朗,应该加上ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);在这转载,希望帮助更多的人解惑。
使用common-net-ftp JAR包的FTPClient时几点要注意的:
1、使用以下代码:ftpclient.changeWorkingDirectory(parentPath);
FTPFile[] files = ftpclient.listFiles();获取FTP服务器上的文件列表时parentPath的内容一般是以“/”开头的,如果没有需要补添上。
2、往FTP服务器上传文件时,使用以下代码:ftp.storeFile(fileName, fis);时fileName的内容不能是包含路径和文件名称的,而应该只包含文件名称,这也是InputStream类型的fis存在的理由。
3、上传文件时最好将文件类型设置为二进制文件(ftpclient.setFileType(FTPClient.BINARY_FILE_TYPE);),如果环境编码明确可设置相应的编码:(ftpclient.setControlEncoding("UTF-8");),如果不明确则不设置。
4、使用以下代码:ftp.rename(oldFileName, newFileName);将文件改名时2个参数也应该只包含文件名称,不能包含路径。
5、下载多个文件时,由于下载文件有2种方法:一是直接下载到本地,需要指明本地文件路径和名称;二是获取服务器文件的输入流,方便以流的形式对文件进行操作。注意:当使用获取流的方法下载多个文件时比较麻烦,必须遵循以下原则:获取服务器连接——获取输入流——关闭服务器连接——获取服务器连接——获取输入流——关闭服务器连接.....,使用直接下载到本地就不用这么麻烦可:获取服务器连接——(循环下载文件到本地)——关闭服务器连接。
参考以下代码:
流的方式:
FTPFile[] fileList = ftp.listFiles(path);
for (FTPFile file : fileList) {
String name = file.getName();
InputStream ins = downFile(ftp, name);
/*将输入流存储起来方便后续处理*/
closeFTPConnect(ftp); //ftp是FTPClient的引用
ftp = getFTPConnect(ftpFilePath); //重新获取连接
}
/*完了还要再关闭一次连接*/
直接下载:
for (FTPFile file : fileList) {
String name = file.getName();
File desFile = new File(desPath.concat(name));
FileOutputStream fos = new FileOutputStream(desFile);
ftp.retrieveFile(name, fos);
}
转载地址:http://blog.youkuaiyun.com/h345210sun/article/details/4704395