第三天:利用ftp上傳圖片到服務器

vsftpd + nginx 實現圖片上傳到服務器

  1. 設置圖片存放路徑
    • vim /usr/local/nginx/conf/nginx.conf(添加下面代碼)
      location /images/ {
      	    root  /home/ftpuser/www/;
      	    autoindex on;
      	}
      # root 是將images映射到/home/ftpuser/www/
      # autoindex on 是打開瀏覽功能
      
  2. 重啓nginx,加載配置文件
    1. vim /usr/local/nginx/sbin
    2. ./nginx -s reload
  3. 修改用戶訪問權限
    1. chown ftpuser /home/ftpuser
    2. chmod 777 -R /home/ftpuser
  4. 瀏覽器訪問
    • 域名或IP地址 / images / xxx.jpg
  5. java實現ftp上傳文件測試
    public class TestFTP {
        @Test
        public void testFtpClient() throws Exception{
            // 創建一個 FtpClient 對象
                FTPClient ftpClient = new FTPClient();
            // 創建 ftp連接
            // xxxx : IP地址
                ftpClient.connect("xxxx", 21);
            // 登錄 ftp 服務器,使用用戶名和密碼
                ftpClient.login("ftpuser", "123456");
            // 上傳文件
            // 讀取本地文件
                FileInputStream inputStream = new FileInputStream(new File("E:\\imageShow\\local.jpg"));
            // 設置上傳路徑
            // 服務器路徑
                ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
            // 修改上傳文件的格式(FTP:文本格式 圖片:二進制格式)
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 第一個參數:上傳到服務器端的文件名
            // 第二個參數:上傳文件的 inputStream
                ftpClient.storeFile("server.jpg", inputStream);
            // 關閉連接
                ftpClient.logout();
        }
    }   
    
  6. 使用配置文件設置FTP和圖片服務器的參數
    1. 新建一個 resource.properties
      # FTP 相關配置
      # FTP 相關地址
      # 即 IP地址
      FTP_ADDRESS=xxx.xxx.xxx.xxx
      FTP_port=21
      FTP_USERNAME=ftpuser
      FTP_PASSWORD=123456
      FTP_BASE_PATH=/home/ftpuser/www/images
      
      # 圖片服務器相關配置
      # 圖片服務器基礎 url
      IMAGE_BASE_URL=http://xxx.xxx.xxx.xxx/images
      
    2. 在spring配置文件中添加掃描
      <context:property-placeholder location="classpath:resource/*.properties" />
      
    3. 在類中使用
      @Value("${FTP_ADDRESS}")
      private String FTP_ADDRESS;
      @Value("${FTP_port}")
      private Integer FTP_port;
      
  7. 上傳圖片
    • service

      /** 
      * @Description: 圖片上傳服務 
      * @Author: 塵
      * @Date: 2019/2/2 
      */
      @Service
      public class PictureServiceImpl implements PictureService{
          @Value("${FTP_ADDRESS}")
          private String FTP_ADDRESS;
          @Value("${FTP_port}")
          private Integer FTP_port;
          @Value("${FTP_USERNAME}")
          private String FTP_USERNAME;
          @Value("${FTP_PASSWORD}")
          private String FTP_PASSWORD;
          @Value("${FTP_BASE_PATH}")
          private String FTP_BASE_PATH;
          @Value("${IMAGE_BASE_URL}")
          private String IMAGE_BASE_URL;
      
          @Override
          public Map uploadPicture(MultipartFile uploadFile){
      
              Map resultMap = new HashMap();
              try {
                  // 生成一個新文件名
                  // 取原文件名
                  String oldName = uploadFile.getOriginalFilename();
                  // 生成新文件名
                  // UUID.randomUUID
                  String newName = IDUtils.genImageName();
                  // 截擴展名
                  newName = newName + oldName.substring(oldName.lastIndexOf("."));
                  // 圖片上傳
                  String imagePath = new DateTime().toString("/yyyy/MM/dd");
                  boolean result = FtpUtil.uploadFile(FTP_ADDRESS, FTP_port,FTP_USERNAME, FTP_PASSWORD, FTP_BASE_PATH, new DateTime().toString("/yyyy/MM/dd"), newName, uploadFile.getInputStream());
                  // 返回結果
                  if(!result){
                      // 失敗
                      resultMap.put("error", 1);
                      resultMap.put("message", "文件上傳失敗");
                      return resultMap;
                  }
                  resultMap.put("error", 0);
                  resultMap.put("url", IMAGE_BASE_URL + "/" + imagePath + "/" + newName);
                  return resultMap;
              } catch (Exception e) {
                  resultMap.put("error", 1);
                  resultMap.put("message", "文件上傳發生異常");
                  return resultMap;
              }
          }
      }
      
    • controller

      /** 
      * @Description: 圖片上傳
      * @Author: 塵
      * @Date: 2019/2/2 
      */
      @Controller
      public class PictureController {
      
          @Autowired
          private PictureService pictureService;
      
          @RequestMapping("/pic/upload")
          @ResponseBody
          public String pictureUpload(MultipartFile uploadFile){
              Map result = pictureService.uploadPicture(uploadFile);
              // return result; 僅在谷歌瀏覽器有效
              // 爲保證功能的兼容性,需要把result轉換成json格式字符串
              String json = JsonUtils.objectToJson(result);
              return json;
          }
      }
      
    • springmvc.xml

      <!-- 定義文件上傳解析器 -->
      <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>
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章