使用Jersey构建图片服务器 有回显图片功能

本文介绍了一个基于Spring MVC的图片上传方案,包括前端界面设计、图片验证、后台处理流程及图片服务器配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前台界面代码

[html]  view plain  copy
  1. <form id="jvForm" action="add.do" method="post" enctype="multipart/form-data">  
  2.     <table>  
  3.         <tr>  
  4.             <td width="20%" class="pn-flabel pn-flabel-h"></td>  
  5.             <td width="80%" class="pn-fcontent">  
  6.                 <img width="100" height="100" id="allImgUrl" />  
  7.                 <input type="hidden" name="imgUrl" id="path" />  
  8.                 <input type="file" onchange="uploadPic()" name="pic" id="logoPic"/>  
  9.             </td>  
  10.         </tr>  
  11.     </table>  
  12. </form>  

2.前台JS代码

[javascript]  view plain  copy
  1. <script type="text/javascript">  
  2.     //上传图片  
  3.     function uploadPic() {  
  4.         //定义参数  
  5.         var options = {  
  6.             url : "/upload/uploadPic.do",  
  7.             dataType : "json",  
  8.             type : "post",  
  9.             beforeSubmit : function(formData,jqForm,options){  
  10.                 // 判断是否为图片  
  11.                 // 将jqForm转成DOM对象  
  12.                 var f = jqForm[0];  
  13.                 // 获取DOM对象中name为logoPic的值  
  14.                 var v = f.logoPic.value;  
  15.                 // 获取扩展名,并转成小写  
  16.                 var ext = v.substring(v.length-3).toLowerCase();  
  17.                 // 比对扩展名 jpg gif bmp png   
  18.                 if(ext != "jpg" && ext != "gif" && ext != "bmp" && ext != "png"){  
  19.                     alert("只允许上传图片!");  
  20.                     return false;  
  21.                 }  
  22.                 //校验提交的表单  
  23.                 return true;  
  24.             },  
  25.             success : function(data) {  
  26.                 // 回显图片内容  
  27.                 $("#allImgUrl").attr("src", data.url);  
  28.                 $("#path").val(data.path);  
  29.             }  
  30.         };  
  31.    
  32.         // jquery.form使用方式  
  33.         $("#jvForm").ajaxSubmit(options);  
  34.     }  
  35. </script>  


3.在Spring中配置图片转换器

[html]  view plain  copy
  1. <!-- 上传图片转换器 -->  
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
  3.     <!-- 设置上传文件的最大尺寸为1MB -->    
  4.     <property name="maxUploadSize" value="1048576"/>  
  5. </bean>  

4.创建UploadController以及工具类
[java]  view plain  copy
  1. package cn.itcast.core.controller.admin;  
  2.    
  3. import java.io.IOException;  
  4. import java.text.DateFormat;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Date;  
  7. import java.util.Random;  
  8.    
  9. import javax.servlet.http.HttpServletResponse;  
  10.    
  11. import org.apache.commons.io.FilenameUtils;  
  12. import org.json.JSONObject;  
  13. import org.springframework.stereotype.Controller;  
  14. import org.springframework.web.bind.annotation.RequestMapping;  
  15. import org.springframework.web.bind.annotation.RequestParam;  
  16. import org.springframework.web.multipart.MultipartFile;  
  17.    
  18. import com.sun.jersey.api.client.Client;  
  19. import com.sun.jersey.api.client.WebResource;  
  20.    
  21. import cn.itcast.common.web.ResponseUtils;  
  22. import cn.itcast.core.web.Constants;  
  23.    
  24. @Controller  
  25. public class UploadController {  
  26.     // 上传图片  
  27.     @RequestMapping(value = "/upload/uploadPic.do")  
  28.     public void uploadPic(@RequestParam(required = false) MultipartFile pic, HttpServletResponse response) {  
  29.         // 扩展名  
  30.         String ext = FilenameUtils.getExtension(pic.getOriginalFilename());  
  31.         // 图片名称生成策略  
  32.         DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");  
  33.         // 图片名称一部分  
  34.         String format = df.format(new Date());  
  35.         // 随机三位数  
  36.         Random r = new Random();  
  37.         // n 1000 0-999 99  
  38.         for (int i = 0; i < 3; i++) {  
  39.             format += r.nextInt(10);  
  40.         }  
  41.         // 实例化一个Jersey  
  42.         Client client = new Client();  
  43.         // 保存数据库  
  44.         String path = "upload/" + format + "." + ext;  
  45.         // 另一台服务器的请求路径是?  
  46.         String url = Constants.IMAGE_URL + path;  
  47.         // 设置请求路径  
  48.         WebResource resource = client.resource(url);  
  49.    
  50.         // 发送开始 POST GET PUT  
  51.         try {  
  52.             resource.put(String.class, pic.getBytes());   
  53.         } catch (IOException e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.    
  57.         // 返回二个路径  
  58.         JSONObject jsonObject = new JSONObject();  
  59.         jsonObject.put("url", url);  
  60.         jsonObject.put("path", path);  
  61.    
  62.         ResponseUtils.renderJson(response, jsonObject.toString());  
  63.     }  
  64. }  
[java]  view plain  copy
  1. package cn.itcast.core.web;  
  2.    
  3. public interface Constants {  
  4.     /** 
  5.      * 图片服务器 
  6.      */  
  7.     public static final String IMAGE_URL = "http://localhost:8088/BabasportProject_ImageService/";  
  8. }  
[java]  view plain  copy
  1. package cn.itcast.common.web;  
  2.    
  3. import java.io.IOException;  
  4.    
  5. import javax.servlet.http.HttpServletResponse;  
  6.    
  7. public class ResponseUtils {  
  8.     // 发送内容  
  9.     public static void render(HttpServletResponse response, String contentType, String text) {  
  10.         response.setContentType(contentType);  
  11.         try {  
  12.             response.getWriter().write(text);  
  13.         } catch (IOException e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17.    
  18.     // 发送的是JSON  
  19.     public static void renderJson(HttpServletResponse response, String text) {  
  20.         render(response, "application/json;charset=UTF-8", text);  
  21.     }  
  22.    
  23.     // 发送xml  
  24.     public static void renderXml(HttpServletResponse response, String text) {  
  25.         render(response, "text/xml;charset=UTF-8", text);  
  26.     }  
  27.    
  28.     // 发送text  
  29.     public static void renderText(HttpServletResponse response, String text) {  
  30.         render(response, "text/plain;charset=UTF-8", text);  
  31.     }  
  32. }  

5.搭建另一个Tomcat,作为图片服务器
 图片服务器Tomcat的设置  tomcat/conf/web.xml中内容更改

[html]  view plain  copy
  1. <servlet>  
  2.     <servlet-name>default</servlet-name>  
  3.     <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>debug</param-name>  
  6.         <param-value>0</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>readonly</param-name>  
  10.         <param-value>false</param-value>  
  11.     </init-param>  
  12.     <init-param>  
  13.         <param-name>listings</param-name>  
  14.         <param-value>false</param-value>  
  15.     </init-param>  
  16.     <load-on-startup>1</load-on-startup>  
  17. </servlet>  

6.Eclipse上创建JavaWeb项目,取名BabasprotProject_ImageService


7.修改图片服务器的Tomcat的端口号


8.在BabasprotProject_ImageService项目的webapp目录下创建upload文件夹


======================

启动服务器 测试是否成功

======================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚人节第二天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值