目前项目开发中图片存放方式有很多。通过ftp上传到ftp服务器就是其中的一种。
这两天在使用ftp上传图片时遇到了一个问题:图片上传以后需要移动文件夹。
我实现的思路大概是这样的:
1.先根据原图片路径找到对应的文件,拿到文件流
InputStream inputStream = ftp.retrieveFileStream(new String(filePath.getBytes("UTF-8"), "ISO-8859-1"));
2.将文件流通过ftp上传到服务器
//设置为被动模式ftp.enterLocalPassiveMode();//设置上传文件的类型为二进制类型ftp.setFileType(FTP.BINARY_FILE_TYPE);//上传文件if (!ftp.storeFile(filename, input)) {return result;}input.close();
3.上传完成后将原来的文件删除。
方法写完以后在自己电脑也就是windows环境下完全正常。但是放到服务器linux环境下以后上传的图片却损坏了。搜了很多博客,最后发现问题出在了文件流的类型上。
第一步获取流的时候并没有规定流的类型,然后第二步上传的时候规定了流的类型为FTP.BINARY_FILE_TYPE
在windows环境下可能正好默认的是二进制(FTP.BINARY_FILE_TYPE)所以第一步获取的流正好第二步能用。但是在linux环境下获取的流恰巧不是二进制(这里说的是我用的服务器,也有可能你用的服务器是二进制,那就不会出现我的问题)所以这个时候第一步获取的流在第而不就不能用了。
解决的方法:在第一步获取流的时候就限定流的类型
ftp.enterLocalPassiveMode();ftp.setFileType(FTP.BINARY_FILE_TYPE);InputStream inputStream = ftp.retrieveFileStream(new String(filePath.getBytes("UTF-8"), "ISO-8859-1"));
这样就解决了这个问题。
ftp工具类可以参考我的另一篇博客:/qq_35771266/article/details/92075898
如果觉得《Java使用ftp上传图片到服务器 图片损坏》对你有帮助,请点赞、收藏,并留下你的观点哦!