当前位置:Gxlcms > mysql > MySQL+SSM+Ajax上传图片问题的分析(图)

MySQL+SSM+Ajax上传图片问题的分析(图)

时间:2021-07-01 10:21:17 帮助过:32人阅读

本文主要介绍了MySQL+SSM+Ajax上传图片问题。具有很好的参考价值。下面跟着小编一起来看下吧

第一次写上传图片的代码,碰到很多问题。昨天做了整整一天,终于在晚上的时候成功了。大声欢呼。

但是,做完之后,还是有很多问题想不通。所以在这里也算是写个笔记,日后忘记了可以回顾,也算请教各路朋友。(^_^)

 Q.1. 网上说Ajax不能上传文件,但是这个说法并不是很多,也还是有蛮多通过Ajax上传文件的分享。

我也没有通过Ajax做出来,最后是通过AjaxSubmit这个方法写的。

 Q.2. AjaxSubmit这个方法对文件上传的大小有默认限制吧。我选择大于100KB的文件上传就不能成功,小于100KB的就可以成功。

上传大于100KB的时候,浏览器console返回下面的提示。说明他还是执行了ajaxSubmit的success方法,并返回textStatus的值为success,但是XMLHttpRequest, 和 errorThrown的responseText返回的HTML代码内容是我在spring-web.xml配置的异常处理视图网页。

js代码(提交表单事件):

输出上传成功"); $("#imgClose").click(); }, error: function(XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest); console.log(textStatus); console.log(errorThrown); console.log("前端输出上传失败"); } }; $("#imgForm").ajaxSubmit(option); return false; }

前端HTML表单:

  1. <form id="imgForm" >
  2.   <p class="modal-content">
  3.   <p class="modal-header">
  4. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  5. <h4 class="modal-title" id="myModalLabel">修改头像</h4>
  6. </p>
  7. <p class="modal-body">
  8.   <input type="file" id="imgFile" name="imgFile"/>
  9. <input id="imgId" name="userId" value="${user.id }" style="display:none" />
  10. </p>
  11. <p class="modal-footer">
  12.   <button type="button" class="btn btn-default" data-dismiss="modal" id="imgClose">关闭</button>
  13. <button type="button" class="btn btn-primary" onclick="postImg();" id="imgSubmit">上传</button>
  14. </p>
  15. </p>
  16. </form>

下面是后台的java代码(Controller)

  1. //更新用户头像
  2. @RequestMapping(value="/insertUserPhoto.do",method = RequestMethod.POST)
  3. public void insertUserPhoto(
  4. HttpServletRequest req, HttpServletResponse res){
  5. System.out.println("----- 插入图片 -------");
  6. try{
  7. String id = req.getParameter("userId");
  8. System.out.println(id);
  9. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
  10. MultipartFile file = multipartRequest.getFile("imgFile");
  11. byte[] photo = file.getBytes();
  12. boolean result = serv.insertUserPhoto(id, photo);
  13. res.setContentType("text/html;charset=utf8");
  14. res.getWriter().write("result:" + result);
  15. }catch(Exception e){
  16. e.printStackTrace();
  17. }
  18. System.out.println("----- 插入图片end -------");
  19. }
  20. /**
  21. * 读取用户头像
  22. * @param req
  23. * @param res
  24. */
  25. @RequestMapping(value="/readPhoto.do", method=RequestMethod.GET)
  26. public void readPhoto(HttpServletRequest req, HttpServletResponse res){
  27. System.out.println("------readPohto-----");
  28. String id = Utils.getSessionUserId(req);
  29. try {
  30. User user = serv.selectUserPhoto(id);
  31. res.setContentType("image/jpeg");
  32. res.setCharacterEncoding("utf-8");
  33. OutputStream outputStream = res.getOutputStream();
  34. InputStream in = new ByteArrayInputStream(user.getPhoto());
  35. int len = 0;
  36. byte[] buf = new byte[1024];
  37. while((len = in.read(buf,0,1024)) != -1){
  38. outputStream.write(buf, 0, len);
  39. }
  40. outputStream.close();
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. System.out.println("-----readPohto end-----");
  45. return;
  46. }

Service实现类

  1. //查找用户图片(头像)
  2. public User selectUserPhoto(String id) throws ImageException {
  3. User user = userDao.findUserById(id);
  4. if(user == null){
  5. throw new UserNameException("用户名不存在!");
  6. }
  7. Map<String, Object> data = userDao.selectUserPhoto(id);
  8. System.out.println(data);
  9. user.setPhoto((byte[]) data.get("photo"));
  10. return user;
  11. }
  12. //更新用户图片(头像)
  13. public boolean insertUserPhoto(String userId, byte[] photo) throws ImageException, UserNameException {
  14. if(userId == null || userId.trim().isEmpty()){
  15. throw new UserNameException("用户id不存在");
  16. }
  17. User user = userDao.findUserById(userId);
  18. if(user == null){
  19. throw new UserNameException("用户不存在");
  20. }
  21. user.setPhoto(photo);
  22. int n = userDao.updateUserPhoto(user);
  23. System.out.println("插入图片:" + n);
  24. return n==1?true:false;
  25. }

实体类User的photo 是 byte[] 类型的;

数据库的photo是 longblob:

mapper映射器:

  1. <!-- 更新图片 -->
  2. <update id="updateUserPhoto" parameterType="cn.tedu.note.entity.User">
  3. UPDATE user set id = #{id}, photo = #{photo,jdbcType=BLOB} <!-- 这里试了,如果不加jdbcType=BLOB 会出错,虽然不是很理解,但也照做了 -->
  4. WHERE id = #{id}
  5. </update>
  6. <!-- 获取图片 -->
  7. <select id="selectUserPhoto" parameterType="String" resultType="Map">
  8. SELECT id as id, photo as photo from user
  9. WHERE id=#{id}
  10. </select>

Spring-web.xml配置

  1. <!-- 文件上传表单的视图解析器 -->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="maxUploadSize"><value>100000</value></property>
  4. <property name="defaultEncoding"><value>UTF-8</value></property>
  5. </bean>

以上就是MySQL+SSM+Ajax上传图片问题的分析(图)的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行