使用Jersey + SpringMVC 上傳圖片到圖片服務器

實際項目中可能要用到單獨的文件服務器, 這時候可以使用jersey上傳文件的方法達到分離文件服務器和主服務器。於是通過查詢資料以及不斷嘗試,終於走出了這個圖片上傳一直報錯的困擾,現在將代碼貼上,希望對後來者有幫助:

欣賞結果

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

具體操作

創建圖片服務器

1)修改tomcat配置, 允許文件寫操作,修改conf目錄下的web.xml, 添加readonly參數爲false。

<servlet>  
        <servlet-name>default</servlet-name>  
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>  
        <init-param>  
            <param-name>debug</param-name>  
            <param-value>0</param-value>  
        </init-param>  
        <init-param>  
            <param-name>readonly</param-name>  
            <param-value>false</param-value>  
        </init-param>  
        <init-param>  
            <param-name>listings</param-name>  
            <param-value>true</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
</servlet>  

2)創建一個web項目,如image-web,新建文件夾upload(用於存儲位置),並打成war包,放入我們圖片服務器Tomcat中webapps下 。

編寫上傳服務器

1)新建項目

2)導入相關架包

<!-- 添加jersey支持 -->
<dependency>  
      <groupId>com.sun.jersey</groupId>  
      <artifactId>jersey-core</artifactId>  
      <version>1.19</version>  
    </dependency>  
    <dependency>  
      <groupId>com.sun.jersey</groupId>  
      <artifactId>jersey-client</artifactId>  
      <version>1.19</version>  
</dependency>  

<!-- 添加Spring支持 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-tx</artifactId>
         <version>4.1.7.RELEASE</version>
        </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>

3)配置相關文件

web.xml

<!-- Spring配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>
    <!-- 編碼過濾器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- Spring監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 添加對springmvc的支持 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <!-- <async-supported>true</async-supported> -->

    </servlet>

    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

spring-mvc.xml

<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"/>  
        <property name="maxUploadSize" value="10000000"/>
    </bean>

4)編寫相關代碼

UploadController.java

/**
     * 圖片上傳
     * @param request
     * @return
     */
    @RequestMapping(value = "/upload", method = RequestMethod.POST)  
    public String upload(HttpServletRequest request) {  
        MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;  
        Iterator<String> iter = req.getFileNames();  
        Map<String, Object> map = new HashMap<String,Object>() ;
        Gson gson = new Gson() ;
        if (iter.hasNext()){  
            String fileName = iter.next();  
            MultipartFile file = req.getFile(fileName);  
            fileName = file.getOriginalFilename(); 
            String suffix = fileName.substring(fileName.lastIndexOf(".")) ;
            // 圖片名稱生成策略
            DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String format = df.format(new Date()) ;
            // 三位隨機數
            Random r = new Random() ;
            for(int i=0; i<3; i++) {
                format +=r.nextInt(10) ;
            }
            Client client = Client.create();  
            String URL = "http://localhost:8800/image-web/upload/" ;
            if (".png".equalsIgnoreCase(suffix) || ".jpg".equalsIgnoreCase(suffix) || ".gif".equalsIgnoreCase(suffix)) {
                WebResource resource = client.resource(URL + format + suffix);
                try {
                    resource.put(String.class, file.getBytes());
                    map.put("status", 200) ;
                    map.put("url", URL+format + suffix) ;
                    map.put("message", "上傳成功!") ;
                } catch (IOException e) {
                    e.printStackTrace() ;
                    map.put("status", 500) ;
                    map.put("url", "") ;
                    map.put("message", "上傳失敗!") ;
                }
            } else {
            map.put("status", 500) ;
            map.put("url", "") ;
            map.put("message", "上傳失敗! 圖片格式不正確!") ;
            }
        }
        return gson.toJson(map) ;
    }

index.jsp

<div class="container-fluid">
  <div class="row">
    <div class="col-md-2">&nbsp;</div>
    <div class="col-md-8" style="height:300px">
    <div class="bs-callout bs-callout-info">
    <h3 align="center"><b>使用Jersey+SpringMVC 實現上傳圖片到圖片服務器</b></h3>
    <h4 align="right">----------- &nbsp;bootstrap fileinput.js上傳圖片實例</h4>
    </div>
    <!-- <h3 align="center">bootstrap fileinput.js上傳多張圖片實例</h3> -->
    <form action="<c:url value="/upload.html"/> " method="post" enctype="multipart/form-data">  
        <input type="file" id ="projectfile" class="projectfile"  name="file"  multiple class="file-loading"/>  
        <p class="help-block">支持jpg、png、gif格式</p>
    </form>
    </div>
    <div class="col-md-2">&nbsp;</div>
  </div>
</div>
<script type="text/javascript">
$(function () {
    //0.初始化fileinput
    var oFileInput = new FileInput();
    // 圖片上傳
    oFileInput.Init("projectfile", "${pageContext.request.contextPath}/upload.html");
});

var FileInput = function () {
     var oFile = new Object();

     //初始化fileinput控件(第一次初始化)
     oFile.Init = function(ctrlName, uploadUrl) {
     var control = $('#' + ctrlName);

     //初始化上傳控件的樣式
     control.fileinput({
     language: 'zh', //設置語言
     uploadUrl: uploadUrl, //上傳的地址
     allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件後綴
     showUpload: true, //是否顯示上傳按鈕
     browseClass: "btn btn-info", //按鈕樣式 
     maxFileCount: 10, //表示允許同時上傳的最大文件個數
     initialCaption: "請上傳XXX圖片...",//文本框初始話value
     validateInitialCount:true,
     previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
     msgFilesTooMany: "選擇上傳的文件數量({n}) 超過允許的最大數值{m}!",
     });

     var html = "" ;
     //導入文件上傳完成之後的事件
     $("#projectfile").on("fileuploaded", function (event, data, previewId, index) {
         if(data.response && data.response.status !==200) {
             layer.msg(data.response.message);
         } else {
             layer.alert(data.response.message, {
              skin: 'layui-layer-molv' //樣式類名
              ,closeBtn: 0
            }, function(){
              html += '<img alt="" src="'+data.response.url+'">' ;
              layer.alert(html, {
                skin: 'layui-layer-lan'
                ,closeBtn: 0
                ,anim: 4 //動畫類型
              });
            });
         }

     });
    }
     return oFile;
    };
</script>

使用Jersey + SpringMVC 上傳圖片到圖片服務器到此結束。本篇爲wenteryan原創,轉載請註明出處:http://blog.csdn.net/wenteryan

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章