在正式图片上传之前,先处理一个细节问题:
每一次发布项目,Tomcat都会重新解压war包,之前上传过的图片会丢失
为了解决这个问题:可以不在Tomcat下保存图片,而是另找一个目录。
上传图片:
<form method="post" enctype="multipart/form-data"> <input type="file" name="pictureFile"> </form>
在上传图片之前,需要在springMVC.xml中配置:
<!-- 上传图片配置实现类 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传图片的大小(单位:字节)--> <property name="maxUploadSize" value="5000000" /> </bean>
注意:这个id不能改成其他的,否则无效
除了上传文件大小以外,还有其他几个参数,这里就不一一展示了
保存图片到F:/upload:
@RequestMapping(value = "/upload") public ModelAndView upload(MultipartFile pictureFile) { // 保存图片 // 防止重复,给图片id设为UUID String id = UUID.randomUUID().toString().replace("-", ""); String exName = FilenameUtils.getExtension(pictureFile.getOriginalFilename()); String name = id+"."+exName; try { pictureFile.transferTo(new File("F:\upload\" + name)); } catch (Exception e) { e.printStackTrace(); } //保存ID到数据库 //userService.savePicture(id); ModelAndView mav = new ModelAndView(); mav.setViewName("success"); return mav; }
为了方便获得文件扩展名,这里用了其他的包,如果自己写稍显麻烦:
JSON交互:
首先要导入JSON需要的包:
前端AJAX:
<script type="text/javascript"> $(function(){ var params = '{"id": 1,"name": "测试商品","price": 99.9,"detail": "测试商品描述","pic": "123456.jpg"}'; $.ajax({ url : "${pageContext.request.contextPath }/json.action", data : params, contentType : "application/json;charset=UTF-8", type : "post", dataType : "json", success : function(data){ alert(data.name); } }); }); </script>
Controller:
//json交互 @RequestMapping(value = "/json.action") public @ResponseBody Items json(@RequestBody Items items) { //RequestBody注解,可以将json字符串解析到Items对象中 //注意:Items的属性名必须和json的Key一致 System.out.println(items); Items responseItem = new Items(); items.setName("success"); //ReponseBody注解:自动将对象封装成JSON字符串返回 return responseItem; }