如何快速搭建图片服务器[通俗易懂]

前言最近学习一个分布式集群的项目,正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。代码参考:https://github.com/zyjcxc/taotao.git比如:解决办法:linux做磁盘的映射,说能解决,但服务器多了也不好弄,所以可以再搭建一个图片服务器图片服务器两个服务:http:可以使用nginx…

大家好,又见面了,我是你们的朋友全栈君。

前言

分布式集群的项目, 正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。

代码参考: https://github.com/zyjcxc/taotao.git

比如:
如何快速搭建图片服务器[通俗易懂]

解决办法:

linux做磁盘的映射,说能解决,但服务器多了也不好弄,所以可以再搭建一个图片服务器

图片服务器两个服务:

  • http:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。也可以结合我之前的mongo文件服务器,将文件url存到Mongo中。

  • ftp服务:使用linux做服务器,在linux中有个ftp组件vsftpd。

步骤

服务器需求

Linux:CentOS6.4
Nginx:1.8.0
Vsftpd:需要在线安装。

Nginx安装

参考 Nginx安装指南.

Vsftpd安装

参考 Vsftpd安装指南.

图片服务器的测试

安装好环境后,可以用ftp客户端(FileZilla)测试是否能上传下载文件。

ftp上传图片后, 用浏览器直接访问图片路径,测试是否有图片显示。

java代码实现上传

使用apache的FTPClient工具访问ftp服务器。需要在pom文件中添加依赖:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>${commons-net.version}</version>
</dependency>
public class FTPClientTest { 
   
    @Test
    public void testFtp() throws Exception {
        //1、连接ftp服务器
        FTPClient ftpClient = new FTPClient();
        ftpClient.connect("192.168.1.133", 21);
        //2、登录ftp服务器
        ftpClient.login("ftpuser", "ftpuser");
        //3、读取本地文件
        FileInputStream inputStream = new FileInputStream(new File("D:\\Documents\\Pictures\\images\\2010062119283578.jpg"));
        //4、上传文件
        //1)指定上传目录
        ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
        //2)指定文件类型
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        //第一个参数:文件在远程服务器的名称
        //第二个参数:文件流
        ftpClient.storeFile("hello.jpg", inputStream);
        //5、退出登录
        ftpClient.logout();
    }
}

后续可以根据需求,将其封装工具类,写service, contorller即可, 截取部分代码

public Map uploadPicture(MultipartFile uploadFile) {
    Map<String, Object> map = new HashMap<>(2);
    try {
        String oldName = uploadFile.getOriginalFilename();
        String newName = IDUtils.genImageName();
        newName += oldName.substring(oldName.lastIndexOf("."));
        String imagePath = new DateTime
                ().toString("yyyy/MM/dd");
        boolean result = FtpUtil.uploadFile(FTP_HOST, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, FTP_BASE_PATH, imagePath, newName, uploadFile.getInputStream());
        if (!result) {
            map.put("error", 1);
            map.put("message", "文件上传失败");
            return map;
        }
        map.put("error", 0);
        map.put("url", IMAGE_BASE_URL + "/" + imagePath + "/" + newName);
    } catch (IOException e) {
        map.put("error", 1);
        map.put("message", "文件上传异常");
        e.printStackTrace();
        return map;
    }
    return map;
}

注意

springmvc框架,在配置文件中要加入文件上传解析器

<!-- 定义文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设定默认编码 -->
    <property name="defaultEncoding" value="UTF-8"></property>
    <!-- 设定文件上传的最大值5MB,5*1024*1024 -->
    <property name="maxUploadSize" value="5242880"></property>
</bean>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127913.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle:varchar和varchar2的区别

    Oracle:varchar和varchar2的区别Oracle:varchar和varchar2的区别 1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;2.varchar2把空串等同于null处理,而varchar仍按照空串处理;3.varchar2字符要用几个字节存储,要看数据库使用的字符集. 然后char和varchar2的区别是

    2022年6月18日
    86
  • 升级qq群一直显示服务器失败怎么回事啊,QQ群创建失败是怎么回事,QQ群创建失败原因是什么…

    升级qq群一直显示服务器失败怎么回事啊,QQ群创建失败是怎么回事,QQ群创建失败原因是什么…原标题:QQ群创建失败是怎么回事,QQ群创建失败原因是什么有些时候我们创建QQ群的时候会出现创建失败的情况,狠人朋友都不知道造成这种情况发生的原因和处理的方法。接下来,晖哥就和大家分享下造成QQ群创建失败的原因到底是什么?提示1:敏感字眼/输入不符合规范如果QQ群名称或者群简介中含有敏感字的话,那么在创建QQ群的时候就会出现创建QQ失败的情况发生。建议大家可以修改之后,再进行创建QQ群。提示2:…

    2022年5月19日
    78
  • php 中js跳转页面跳转页面,js跳转代码_PHP页面跳转 Js页面跳转代码[通俗易懂]

    php 中js跳转页面跳转页面,js跳转代码_PHP页面跳转 Js页面跳转代码[通俗易懂]摘要腾兴网为您分享:PHP页面跳转Js页面跳转代码,自动刷宝,中信金通,携程抢票,未来屋等软件知识,以及沃金汇,沃行讯通,securecrt.exe,我的世界变形金刚mod,一票通,农场小分队,手电筒,推币机游戏,善行天下,硬盘mhdd,googlekeep,文件批量更名,明星表情包,服装销售软件,进击的巨人日语等软件it资讯,欢迎关注腾兴网。第一部分:JavaScript跳转方法一:…

    2022年8月13日
    3
  • EasyTouch基本用法

    EasyTouch基本用法EasyTouch基本用法本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验——高分辨率用户请根据需求调整网页缩放比例)1hierarchy(层次面板)

    2022年8月2日
    5
  • 微信公众平台开发教程Java版(二) 接口配置

    微信公众平台开发教程Java版(二) 接口配置微信公众账号申请完成后,默认开启的是编辑模式。我们需要修改为开发模式。登陆微信公众平台》功能》高级功能先关闭编辑模式,再开启开发模式。申请成为开发者,如果是服务号,需要则会有开发者凭证信息如图如果是订阅号,则只显示服务器配置。下一步就是配置接口服务器了。在公众平台网站的高级功能–开发模式页,点击“成为开发者”按钮,填写U…

    2022年6月29日
    25
  • 批量导出pdf 和导出图片

    批量导出pdf 和导出图片1.基于已经制作好的pdf和上传到服务器上后,前端只需要传递pdf链接数组的形式/***批量导出pdf*@accesspublic*@paramid分类编号cat_name分类名称*@returnarray*/publicfunctionactionExportpdf(){…

    2022年6月5日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号