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

目前项目开发中图片存放方式有很多。通过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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值