当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    图片服务器要如何搭建

    栏目:win服务器问题汇总 时间:2018-09-26 14:56

      一、前言
     
      分布式集群的项目,正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。
     
      代码参考:https://github.com/zyjcxc/taotao.git
     
      比如:
     
      解决办法:
     
      linux做磁盘的映射,说能解决,但服务器多了也不好弄,所以可以再搭建一个图片服务器
     
      图片服务器两个服务:
     
      http:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。也可以结合我之前的mongo文件服务器,将文件url存到Mongo中。
     
      ftp服务:使用linux做服务器,在linux中有个ftp组件vsftpd。
     
      二、步骤
     
      1、服务器需求
     
      Linux:CentOS6.4
     
      Nginx:1.8.0
     
      Vsftpd:需要在线安装。
     
      2、Nginx安装
     
      参考Nginx安装指南.
     
      3、Vsftpd安装
     
      参考Vsftpd安装指南.
     
      4、图片服务器的测试
     
      安装好环境后,可以用ftp客户端(FileZilla)测试是否能上传下载文件。
     
      ftp上传图片后,用浏览器直接访问图片路径,测试是否有图片显示。
     
      5、java代码实现上传
     
      使用apache的FTPClient工具访问ftp服务器。需要在pom文件中添加依赖:
     
      publicclassFTPClientTest{
     
      @Test
     
      publicvoidtestFtp()throwsException{
     
      //1、连接ftp服务器
     
      FTPClientftpClient=newFTPClient();
     
      ftpClient.connect("192.168.1.133",21);
     
      //2、登录ftp服务器
     
      ftpClient.login("ftpuser","ftpuser");
     
      //3、读取本地文件
     
      FileInputStreaminputStream=newFileInputStream(newFile("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即可,截取部分代码
     
      publicMapuploadPicture(MultipartFileuploadFile){
     
      Map<String,Object>map=newHashMap<>(2);
     
      try{
     
      StringoldName=uploadFile.getOriginalFilename();
     
      StringnewName=IDUtils.genImageName();
     
      newName+=oldName.substring(oldName.lastIndexOf("."));
     
      StringimagePath=newDateTime
     
      ().toString("yyyy/MM/dd");
     
      booleanresult=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","文件上传失败");
     
      returnmap;
     
      }
     
      map.put("error",0);
     
      map.put("url",IMAGE_BASE_URL+"/"+imagePath+"/"+newName);
     
      }catch(IOExceptione){
     
      map.put("error",1);
     
      map.put("message","文件上传异常");
     
      e.printStackTrace();
     
      returnmap;
     
      }
     
      returnmap;
     
      }
     
      注意:
     
      springmvc框架,在配置文件中要加入文件上传解析器