Nginx+Ftp配置图片服务器,实现网址直接访问图片
一、Nginx
教程:https://blog.****.net/zyw_java/article/details/77114671
这个教程要注意,里面的路径有点问题,详情见第三部分
效果:在ip:port的时候可以看到
二、ftp
教程:https://cloud.tencent.com/developer/labs/lab/10002
可以使用匿名登录也可以,然后配置自己的路径来访问,记得chmod 777 增加权限。如果不新建目录也是可以的,ftp的默认目录在/var/ftp/pub,修改根目录可以看这个教程
效果:
三、使用Nginx+ftp组合,实现在网页上直接访问图片
上述已经配置好了ftp和Nginx,但是上面在操作起来还有一些问题:
-
403 Forbidden的情况,就是一般Nginx的默认启动用户的nobody,而nobody是没有任何权限的,也就是即便你给文件夹chmod,Nginx也是访问不到的,找到Nginx的配置文件(我的配置文件在/usr/local/nginx/conf/nginx.conf),任何第一行就可以看到
user nobody
把nobody改成root(或者其他有权限的用户)就可以了
-
路径问题。在前面的配置中,配置Nginx的server代码如下,需要解读一下,其中的location是起效果的!,如果把图片直接放在pub文件里面,访问ip:8190/img/pizza.jpg是会失败的。需要在pub里面再加一个img文件夹,然后将图片放入img里面,才可以通过ip:8190/img/pizza.jpg访问。
server {
listen 8190;
error_log logs/storer_error.log debug;
access_log logs/storer_access.log main;
location /img/ {
#alias /data/ftp/pub/img/;
root /data/ftp/pub/;
}
}
效果:
Android 上传图片
再上面的操作弄完之后,可以根据腾讯云的教程设置用户,然后开放写权限。
- 可以先用FileZilla之类软件测试上传,如果出现错误码则百度谷歌解决问题,一般都是权限问题
- 可以手动上传成功之后,使用下面命令登录即可,把其中的ip,port,账户密码改成自己设置的。
public static boolean uploadImage(String imagePath){
boolean flag;
try {
//创建一个FTPClient对象
FTPClient ftpClient = new FTPClient();
//创建FTP连接(端口号默认21)
ftpClient.connect("ip", port);
//登录FTP服务器,使用用户名密码
ftpClient.login("账号", "密码");
ftpClient.enterLocalPassiveMode();
//读取本地文件
File uploadFile = new File(imagePath);
FileInputStream inputStream = new FileInputStream(uploadFile);
//设置上传路径
ftpClient.changeWorkingDirectory("img/");
//修改上传文件格式
ftpClient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
//上传文件
flag = ftpClient.storeFile(uploadFile.getName(), inputStream);
//关闭连接
ftpClient.logout();
return flag;
}catch (Exception e){
e.printStackTrace();
}
但是需要注意的是,我的文件结构是ftp/pub/img/*.jpg,而且登录进去的目录是再pub里面,所以我需要再changeworkingDirectory,可以根据自己的目录结构来调整。一开始误以为这个目录问题是权限问题,弄了很久。
上一篇: Linux后台运行java的jar包
下一篇: div盒子水平垂直居中的方法