阿里云图片服务器搭建

如果大家没有搭建完成自己的阿里云图片服务器请参考
阿里云图片服务器搭建方法

现象描述

1.首先我的服务器都是正常启动的,通过FTP工具上传文件没有问题。
2.在本地编写测试的代码(Windows环境)连接远程的服务器进行文件上传也是没有问题的。
3.把代码打包完成之后放在我的(Windows)环境下的虚拟机中进行操作也是没有问题的。
4.相同的jar包放到阿里云服务器就出现问题,代码不抛错误,但是文件上传并没有成功。

解决办法

设置自己的vsftpd.conf

# 是否允许匿名登录,默认为YES,这里设置为NO,需要账户和密码进行登录
anonymous_enable=NO
# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES
# 本地用户默认掩码为077,你可以设置本地用户的文件掩码为缺省022
local_umask=022
# 是否激活目录欢迎信息功能(也就是FTP是否显示欢迎信息)
dirmessage_enable=YES
# 是否让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定
xferlog_enable=YES
# 是否设定FTP服务器将启用FTP数据端口的连接请求,ftp-data数据传输,21为连接控制端口
connect_from_port_20=YES
# 是否以标准xferlog的格式书写传输日志文件
xferlog_std_format=YES
# 是否允许监听,如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设置PAM外挂模块提供的认证服务所使用的配置文件名
pam_service_name=vsftpd
# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO,若此项设为YES,则user_list文件中的用户允许登录FTP服务器
# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有
userlist_enable=YES
# 是否使用tcp_wrappers作为主机访问控制方式。
tcp_wrappers=YES
# 经验设置
seccomp_sandbox=NO
# 开启被动模式
pasv_enable=YES
# 开启被动端口范围
pasv_min_port=30000
# 开启被动端口范围
pasv_max_port=30100
# 被动主机IP(使用此选项可覆盖vsftpd将响应PASV命令而通告的IP地址。提供数字IP地址,除非 启用了pasv_addr_resolve,在这种情况下,您可以提供在启动时为您解析的DNS主机名)
pasv_address=XX.XX.XX.XX
# 如果要在pasv_address 选项中使用主机名(而不是IP地址),请设置为YES 
pasv_addr_resolve=yes

然后在代码中添加如下:

ftp.enterLocalPassiveMode();

然后遇到文件上传之后大小为0的情况在修改代码如下:

ftp.storeFile(new String(ftpFileName.getBytes("GBK"), "iso-8859-1"), fis);

或者

ftp.storeFile(new String(ftpFileName.getBytes("UTF-8"), "iso-8859-1"), fis);

之后再次尝试上传,应该就可以了。