jersey基于ssm进行上传图片总结

来源:互联网 发布:大蒜种植面积数据 编辑:程序博客网 时间:2024/06/05 02:41

业务需求 有一个专门存放图片的服务器

解决方案

1 应用Springmvc进行异步上传到控制器

2 应用jersey api 中的sendFile 进行文件上传


首先在Springmvc xml中进行配置

<beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 设置上传文件的最大尺寸为1MB -->

<propertyname="maxUploadSize"value="1048576"/>

</bean>


在页面表单提交的时候属性必须设置为enctype=”multipart/form-data”

<form id="jvForm" action="xxx" method="post" enctype="multipart/form-data">    ...    <img width="100" height="100" id="allImgUrl"/>    <input type="hidden" name="imgUrl" id="path" />    <input type="file" name="pic" onchange="uploadPic()"/></form>



js代码

<script type="text/javascript">    //异步上传图片    function uploadPic(){        //定义参数        var options={            url:"${pageContext.request.contextPath}/upload/uploadPic.do",            dataType:"text",            type:"post",            success:function(data){                //将字符串格式转化成json对象                data=eval("("+data+")");                //回调两个路径                //url,绝对路径,用来在页面显示图片                //path,相对路径, 存入数据库                $("#allImgUrl").attr("src",data.url); //访问图片路径                $("#path").val(data.path);            },            error:function(){                alert("upload error");            }        };        //使用jquery.form异步上传图片        $("#jvForm").ajaxSubmit(options);    }   </script>



这里需要两台服务器,即两个Tomcat,一个是项目本身所在的服务器,假设8080,那么需要添加另外一台服务器作为图片存储所在的服务器,假设8888,在图片存储的服务器Tomcat(8888)中conf/web.xml中修改如下配置,也就是添加readonly=false,服务器内容默认只读,现在改成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>false</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>


springmvc进行处理 并用jersey进行上传

package test;import java.io.IOException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import java.util.Map.Entry;import java.util.Random;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.FilenameUtils;import org.json.JSONObject;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import com.sun.jersey.api.client.Client;import com.sun.jersey.api.client.WebResource;/** * 上传图片 * @author Administrator * */@Controllerpublic class UploadController {    //异步请求没有返回值,不用跳转页面,上传图片    @RequestMapping(value="/upload/uploadPic.do" )    public void uploadPic(@RequestParam(required=false) MultipartFile pic,HttpServletResponse response){        //图片名称生成策略        //1 因为这是一个高并发的,将时间精确到毫秒        DateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");            //作为名称的一部分        String format=df.format(new Date());            //2随机三位数        Random r=new Random();        for(int i=0;i<3;i++){            format+=r.nextInt(10);        }        //得到上传文件的扩展名        String ext=FilenameUtils.getExtension(pic.getOriginalFilename());        //保存数据库的path        String path = "upload/" + format + "." + ext;        //实例化一个jersey        Client client=new Client();        //另一台服务器的请求路径是        String url = "http://localhost:8888/image-web/"+ path;        //为实例设置请求路径,返回一个可以发送图片的对象        WebResource resource=client.resource(url);        //发送开始 方法有post get put(图片基于put提交)        // 1传递时以字符串传递  2 图片        try {            resource.put(String.class,pic.getBytes());        } catch (Exception e) {            e.printStackTrace();        }        //返回两个路径        //JsonObject 拼接成json格式        JSONObject jo=new JSONObject();        jo.put("url", url);        jo.put("path", path);        //发送到前台(可以尝试这里改成"application/json;charset=UTF-8")        response.setContentType("text/plain;charset=UTF-8");        try {            response.getWriter().write(text);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}



0 0
原创粉丝点击