Java使用ftp上传图片到服务器 图片损坏

导读:本篇文章讲解 Java使用ftp上传图片到服务器 图片损坏,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目前项目开发中图片存放方式有很多。通过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工具类可以参考我的另一篇博客:https://blog.csdn.net/qq_35771266/article/details/92075898

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97070.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!