真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Nginx怎么搭建圖片服務(wù)器

這篇文章主要講解了“Nginx怎么搭建圖片服務(wù)器”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Nginx怎么搭建圖片服務(wù)器”吧!

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

效果圖:

Nginx怎么搭建圖片服務(wù)器

需求:實(shí)現(xiàn)圖片的上傳和批量上傳

技術(shù):nginx,vsftpd,spring,springmvc,kindeditor,centos

說明:本章節(jié)內(nèi)容主要是實(shí)現(xiàn)圖片的上傳功能。使用 kindediter 是為了更好的演示圖片的上傳,回顯,批量效果。后臺代碼與kindediter沒有直接關(guān)系,放心閱讀。另外源碼中有mybatis的jar,不用理會,本章內(nèi)容用不到,是為后續(xù)內(nèi)容做準(zhǔn)備!

源碼:見文章底部

場景:用戶將圖片上傳到 tomcat 服務(wù)器上,再由 tomcat 服務(wù)器通過ftp上傳到 nginx 服務(wù)器上。

Nginx怎么搭建圖片服務(wù)器

項(xiàng)目結(jié)構(gòu):

Nginx怎么搭建圖片服務(wù)器

單元測試

首先要攻破核心技術(shù)。通過單元測試實(shí)現(xiàn)圖片上傳的功能。

package com.itdragon.test;

import java.io.file;
import java.io.fileinputstream;

import org.apache.commons.net.ftp.ftp;
import org.apache.commons.net.ftp.ftpclient;
import org.junit.test;

public class pictureftptest {

  // 測試 ftp 上傳圖片功能
  @test
  public void testftpclient() throws exception {
    // 1. 創(chuàng)建一個ftpclient對象
    ftpclient ftpclient = new ftpclient();
    // 2. 創(chuàng)建 ftp 連接
    ftpclient.connect("192.168.0.11", 21);
    // 3. 登錄 ftp 服務(wù)器
    ftpclient.login("ftpuser", "root");
    // 4. 讀取本地文件
    fileinputstream inputstream = new fileinputstream(new file("f:\\hello.png"));
    // 5. 設(shè)置上傳的路徑
    ftpclient.changeworkingdirectory("/usr/local/nginx/html/images");
    // 6. 修改上傳文件的格式為二進(jìn)制
    ftpclient.setfiletype(ftp.binary_file_type);
    // 7. 服務(wù)器存儲文件,第一個參數(shù)是存儲在服務(wù)器的文件名,第二個參數(shù)是文件流
    ftpclient.storefile("hello.jpg", inputstream);
    // 8. 關(guān)閉連接
    ftpclient.logout();
    
  }
  
}

說明:這里的ip地址,端口,ftp用戶名,密碼,本地文件路徑,以及nginx服務(wù)器圖片路徑等,這些字符串參數(shù)都要根據(jù)自己實(shí)際設(shè)置的來填寫的。如果你的nginx和vsftpd安裝是按照我提供的鏈接來做的。那你只需要改ip地址即可。

maven 的web 項(xiàng)目

搭建maven的web 項(xiàng)目,之前有寫過。這里就不過多描述。

項(xiàng)目核心配置文件

首先是 maven 的核心文件 pom.xml


  4.0.0
  com.itdragon.upload
  pictrue-service
  0.0.1-snapshot
  war

  
  
    4.12
    4.1.3.release
    3.2.8
    1.2.2
    1.2.15
    5.1.6
    1.6.4
    2.4.2
    1.0.9
    4.3.5
    1.2
    2.5
    2.0
    2.5
    3.3.2
    1.3.2
    3.3
    3.4.2
    0.9.1
    1.3.1
    2.7.2
    4.10.3
  
  
    
    
      joda-time
      joda-time
      ${joda-time.version}
    
    
    
      org.apache.commons
      commons-lang3
      ${commons-lang3.version}
    
    
      org.apache.commons
      commons-io
      ${commons-io.version}
    
    
      commons-net
      commons-net
      ${commons-net.version}
    
    
    
      com.fasterxml.jackson.core
      jackson-databind
      ${jackson.version}
    
    
    
      org.apache.httpcomponents
      httpclient
      ${httpclient.version}
    
    
    
      junit
      junit
      ${junit.version}
      test
    
    
    
      org.slf4j
      slf4j-log4j12
      ${slf4j.version}
    
    
    
      org.mybatis
      mybatis
      ${mybatis.version}
    
    
      org.mybatis
      mybatis-spring
      ${mybatis.spring.version}
    
    
      com.github.miemiedev
      mybatis-paginator
      ${mybatis.paginator.version}
    
    
      com.github.pagehelper
      pagehelper
      ${pagehelper.version}
    
    
    
      mysql
      mysql-connector-java
      ${mysql.version}
    
    
    
      com.alibaba
      druid
      ${druid.version}
    
    
    
      org.springframework
      spring-context
      ${spring.version}
    
    
      org.springframework
      spring-beans
      ${spring.version}
    
    
      org.springframework
      spring-webmvc
      ${spring.version}
    
    
      org.springframework
      spring-jdbc
      ${spring.version}
    
    
      org.springframework
      spring-aspects
      ${spring.version}
    
    
    
      jstl
      jstl
      ${jstl.version}
    
    
      javax.servlet
      servlet-api
      ${servlet-api.version}
      provided
    
    
      javax.servlet
      jsp-api
      ${jsp-api.version}
      provided
    
    
    
      commons-fileupload
      commons-fileupload
      ${commons-fileupload.version}
    
    
    
      redis.clients
      jedis
      ${jedis.version}
    
    
    
      org.apache.solr
      solr-solrj
      ${solrj.version}
    
  

  
    ${project.artifactid}
    
      
      
        org.apache.maven.plugins
        maven-resources-plugin
        2.7
        
          utf-8
        
      
      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        3.2
        
          1.7
          1.7
          utf-8
        
      
    
    
      
        
        
          org.apache.tomcat.maven
          tomcat7-maven-plugin
          2.2
        
      
    
  

說明:和文件上傳有直接關(guān)系的是:


      commons-fileupload
      commons-fileupload
    

然后是 web 項(xiàng)目的核心文件 web.xml



  pictrue-service
  
  
    contextconfiglocation
    classpath:spring/applicationcontext-*.xml
  
  
    org.springframework.web.context.contextloaderlistener
  
  
  
    characterencodingfilter
    org.springframework.web.filter.characterencodingfilter
    
      encoding
      utf-8
    
  
  
    characterencodingfilter
    /*
  
  
  
    pictrue-service
    org.springframework.web.servlet.dispatcherservlet
    
      contextconfiglocation
      classpath:spring/springmvc.xml
    
    1
  
  
    pictrue-service
    /
  

再是 springmvc 配置文件 springmvc.xml,需要添加文件上傳解析器


  
    
    
    
    
  

最后是 ftp 配置文件 resource.properties

ftp_address=192.168.0.11
ftp_port=21
ftp_username=ftpuser
ftp_password=root
ftp_base_path=/usr/local/nginx/html/images
image_base_url=http://192.168.0.11/images

service 層

上傳圖片的接口 pictureservice.java

package com.itdragon.service;
import java.util.map;
import org.springframework.web.multipart.multipartfile;
public interface pictureservice {

  /**
   * 上傳,批量上傳接口
   * @param uploadfile
   * @return
   */
  map uploadpicture(multipartfile uploadfile);
}

上傳圖片接口實(shí)現(xiàn)類 pictureserviceimpl.java

package com.itdragon.service.impl;

import java.io.ioexception;
import java.io.inputstream;
import java.util.hashmap;
import java.util.map;

import org.apache.commons.net.ftp.ftp;
import org.apache.commons.net.ftp.ftpclient;
import org.apache.commons.net.ftp.ftpreply;
import org.springframework.beans.factory.annotation.value;
import org.springframework.stereotype.service;
import org.springframework.web.multipart.multipartfile;

import com.itdragon.service.pictureservice;

@service
@suppresswarnings({"rawtypes", "unchecked"})
public class pictureserviceimpl implements pictureservice {
  
  // 通過 spring4 的 value注解,獲取配置文件中的屬性值
  @value("${ftp_address}")
  private string ftp_address;   // ftp 服務(wù)器ip地址
  @value("${ftp_port}")
  private integer ftp_port;    // ftp 服務(wù)器port,默認(rèn)是21
  @value("${ftp_username}")
  private string ftp_username;  // ftp 服務(wù)器用戶名
  @value("${ftp_password}")
  private string ftp_password;  // ftp 服務(wù)器密碼
  @value("${ftp_base_path}")
  private string ftp_base_path;  // ftp 服務(wù)器存儲圖片的絕對路徑
  @value("${image_base_url}")
  private string image_base_url; // ftp 服務(wù)器外網(wǎng)訪問圖片路徑

  @override
  public map uploadpicture(multipartfile uploadfile) {
    map resultmap = new hashmap<>();
    try {
      // 1. 取原始文件名
      string oldname = uploadfile.getoriginalfilename();
      
      // 2. ftp 服務(wù)器的文件名
      string newname = oldname;
      //圖片上傳
      boolean result = uploadfile(ftp_address, ftp_port, ftp_username, ftp_password, 
          uploadfile.getinputstream(), ftp_base_path, newname);
      //返回結(jié)果
      if(!result) {
        resultmap.put("error", 1);
        resultmap.put("message", "upload fail");
        return resultmap;
      }
      resultmap.put("error", 0);
      resultmap.put("url", image_base_url + "/" + newname);
      return resultmap;
      
    } catch (exception e) {
      e.printstacktrace();
      resultmap.put("error", 1);
      resultmap.put("message", "upload fail");
      return resultmap;
    }
  }
  
  /**
   * ftp 上傳圖片方法
   * @param ip      ftp 服務(wù)器ip地址
   * @param port     ftp 服務(wù)器port,默認(rèn)是21
   * @param account    ftp 服務(wù)器用戶名
   * @param passwd    ftp 服務(wù)器密碼
   * @param inputstream  文件流
   * @param workingdir  ftp 服務(wù)器存儲圖片的絕對路徑
   * @param filename   上傳到ftp 服務(wù)器文件名
   * @throws exception
   * 
   */
  public boolean uploadfile(string ip, integer port, string account, string passwd,
      inputstream inputstream, string workingdir, string filename) throws exception{
    boolean result = false;
    // 1. 創(chuàng)建一個ftpclient對象
    ftpclient ftpclient = new ftpclient();
    try {
      // 2. 創(chuàng)建 ftp 連接
      ftpclient.connect(ip, port);
      // 3. 登錄 ftp 服務(wù)器
      ftpclient.login(account, passwd);
      int reply = ftpclient.getreplycode(); // 獲取連接ftp 狀態(tài)返回值
      system.out.println("code : " + reply);
      if (!ftpreply.ispositivecompletion(reply)) {
        ftpclient.disconnect(); // 如果返回狀態(tài)不再 200 ~ 300 則認(rèn)為連接失敗
        return result;
      }
      // 4. 讀取本地文件
//     fileinputstream inputstream = new fileinputstream(new file("f:\\hello.png"));
      // 5. 設(shè)置上傳的路徑
      ftpclient.changeworkingdirectory(workingdir);
      // 6. 修改上傳文件的格式為二進(jìn)制
      ftpclient.setfiletype(ftp.binary_file_type);
      // 7. 服務(wù)器存儲文件,第一個參數(shù)是存儲在服務(wù)器的文件名,第二個參數(shù)是文件流
      if (!ftpclient.storefile(filename, inputstream)) {
        return result;
      }
      // 8. 關(guān)閉連接
      inputstream.close();
      ftpclient.logout();
      result = true;
    } catch (exception e) {
      e.printstacktrace();
    }finally {
      // fixme 聽說,項(xiàng)目里面最好少用try catch 捕獲異常,這樣會導(dǎo)致spring的事務(wù)回滾出問題???難道之前寫的代碼都是假代碼?。。?
      if (ftpclient.isconnected()) {
        try {
          ftpclient.disconnect();
        } catch (ioexception ioe) {
        }
      }
    }
    return result;
  }

}

說明:

① @value 注解是spring4 中提供的,@value("${xxx}")

② 返回值是一個map,并且key有error,url,message。這是根據(jù)kindediter的語法要求來的。

controller 層

負(fù)責(zé)頁面跳轉(zhuǎn)的 pagecontroller.java

package com.itdragon.controller;

import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.pathvariable;
import org.springframework.web.bind.annotation.requestmapping;

@controller
public class pagecontroller {

  /**
   * 打開首頁
   */
  @requestmapping("/")
  public string showindex() {
    return "index";
  }
  
  @requestmapping("/{page}")
  public string showpage(@pathvariable string page) {
    system.out.println("page : " + page);
    return page;
  }
}

負(fù)責(zé)圖片上傳的 picturecontroller.java

package com.itdragon.controller;

import java.util.map;

import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller;
import org.springframework.web.multipart.multipartfile;

import com.fasterxml.jackson.core.jsonprocessingexception;
import com.fasterxml.jackson.databind.objectmapper;
import com.itdragon.service.pictureservice;

@restcontroller
public class picturecontroller {

  @autowired
  private pictureservice pictureservice;
  
  @requestmapping("pic/upload")
  public string pictureupload(@requestparam(value = "fileupload") multipartfile uploadfile) {
    string json = "";
    try {
      map result = pictureservice.uploadpicture(uploadfile);
      // 瀏覽器擅長處理json格式的字符串,為了減少因?yàn)闉g覽器內(nèi)核不同導(dǎo)致的bug,建議用json
      json = new objectmapper().writevalueasstring(result);
    } catch (jsonprocessingexception e) {
      e.printstacktrace();
    }
    return json;
  }
}

說明:

① @restcontroller 也是spring4 提供的,是 @controller + @responsebody 的組合注解。

② controller層的返回值是一個json格式的字符串。是考慮到瀏覽器對json解析兼容性比較好。

views視圖層

負(fù)責(zé)上傳圖片的jsp頁面 pic-upload.jsp

<%@ page language="java" contenttype="text/html; utf-8" pageencoding="utf-8"%>




itdragon 圖片上傳

  
   
  
  
 
 
  

測試上傳圖片功能接口的form表單

                     

借用kindeditor富文本編輯器實(shí)現(xiàn)批量上傳圖片

          $(function(){       //初始化富文本編輯器       kindeditor.create("#kindeditordesc", {         // name值,必須和controller 的參數(shù)對應(yīng),不然會提示 400 的錯誤         filepostname : "fileupload",         // action值,         uploadjson : '/pic/upload',         // 設(shè)置上傳類型,分別為image、flash、media、file         dir : "image"       });     });     

說明:pic-upload.jsp 分為兩個部分,第一個部分是為了測試上傳圖片功能的form表單。第二個部分是為了更好的體驗(yàn)上傳,批量上傳,回顯功能的kindediter 富文本編輯器。

感謝各位的閱讀,以上就是“Nginx怎么搭建圖片服務(wù)器”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Nginx怎么搭建圖片服務(wù)器這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!


本文名稱:Nginx怎么搭建圖片服務(wù)器
URL標(biāo)題:http://weahome.cn/article/pdoooo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部