昨天忘记给大家说了个事,昨天添加FTP服务器依赖那部分我在搭建项目开始时就已经在taotao-common的pom文件下写好了,大家可以回去看看里面添加Apache组件那部分里面就有。
1、Nginx+FTP出现403错误
还有就是访问nginx下的ftp图片会有我遇到的这个问题,如图:
我不知道大家有没有遇到,假如遇到也不知道大家是怎么去解决的,我把我的解决可以具体点写出来。
1.1、错误分析:
我看了下网上的关于这方面的相关资料,大概总结的两个可能的原因:
1、缺少index.html或者index.php文件(索引文件)
2、权限问题
这是我nginx修改后的配置文件
因此我现在直接排除掉第一种情况。
怎么说呢。果然大部分原因还是会出现在第二种情况下,这就要我们需要去熟悉linux了,可怜的小伙伴们不知道学习的咋样。先解决问题在讨论学习方面吧。
1.2、错误解决
一般这种情况我的是因为是在root用户下编译的安装及启动nginx的,会出现权限问题,没跟ftp服务器所属用户一致导致。于是我就改变了nginx所属的用户和用户组。
root@cdh4>chmod 777 /home/ftpuser/www
root@cdh4>chown -R ftpuser:ftpuser /usr/local/nginx
root@cdh4>/usr/local/nginx/sbin/nginx -s reload
之后在打开浏览器就可以访问的到我昨天用测试代码上传的图片了,地址:
http://blog.csdn.net/sinat_31726559/article/details/52153330
如果还是不行就重启一下机器,在关闭好iptables或者firewall就可以了
2、访问Nginx图片失真
上面虽然我们能够访问到图片了,但是图片却存在失真的情况,这又是怎么一回事呢?
2.1、错误分析
先看看昨天我写的测试代码
从上面可以看出我上传到ftp服务器是以字节流传输的,到服务器后是文本格式,而图片是二进制格式,所以上传上去或出现编码不能恢复到原来的图片模样。
2.2、错误解决
知道错误原因就好解决了,只要修改上传文件的格式就行了,添加以下一句代码就ok了
//修改上传文件格式
client.setFileType(FTP.BINARY_FILE_TYPE);
将之前上传的图片先从服务器删除,在用java代码上传一回
上传ok,接着我们再刷新一下浏览器看看效果。
呵呵,搞定!
3、项目所用到的FTP工具类
这里因为是项目中所用到的工具类。考虑到代码的复用性,我就在taotao-common下新建的一个utils的工具类的包,如下:
工具类代码如下:
代码一
package com.taotao.common.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
*
* @ClassName: FtpUtil
* @Description: TODO(ftp服务器的工具类)
* @author 汪本成
* @date 2016年8月9日 上午10:43:38
*
*/
public class FtpUtil {
/**
* Description: 向FTP服务器上传文件
* @param host FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param basePath FTP服务器基础目录
* @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
* @param filename 上传到FTP服务器上的文件名
* &