使用Jersey + SpringMVC 上传图片到图片服务器

27 篇文章 0 订阅
8 篇文章 0 订阅

实际项目中可能要用到单独的文件服务器, 这时候可以使用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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值