MySQL+SSM+Ajax上传图片问题

作者:梁小涛 时间:2023-01-26 04:22:52 

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

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

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

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

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

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

MySQL+SSM+Ajax上传图片问题

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


function postImg(){
if ($.trim($("#imgFile").val()) == "") {
  alert("请选择图片!");
  return;
 }
console.log($("#imgFile")[0].files[0].size);//小于100*1024,下面的请求就可以成功
var option = {
 url : '/cloudnote/user/insertUserPhoto.do',
 type : 'POST',
//  dataType : 'json',
 headers : {"ClientCallMode" : "ajax"}, //添加请求头部
 success : function(XMLHttpRequest, textStatus, errorThrown){
  console.log(XMLHttpRequest);
  console.log(textStatus);
  console.log(errorThrown);
  console.log("前端输出上传成功");
  $("#imgClose").click();
 },
 error: function(XMLHttpRequest, textStatus, errorThrown) {
  console.log(XMLHttpRequest);
  console.log(textStatus);
  console.log(errorThrown);
  console.log("前端输出上传失败");
 }
};
$("#imgForm").ajaxSubmit(option);
return false;
}

前端HTML表单:


<form id="imgForm" >
<div class="modal-content">
<div class="modal-header">
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  <h4 class="modal-title" id="myModalLabel">修改头像</h4>
 </div>
 <div class="modal-body">
 <input type="file" id="imgFile" name="imgFile"/>
  <input id="imgId" name="userId" value="${user.id }" style="display:none" />
 </div>
 <div class="modal-footer">
 <button type="button" class="btn btn-default" data-dismiss="modal" id="imgClose">关闭</button>
  <button type="button" class="btn btn-primary" onclick="postImg();" id="imgSubmit">上传</button>
 </div>
</div>
</form>

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


//更新用户头像
@RequestMapping(value="/insertUserPhoto.do",method = RequestMethod.POST)
public void insertUserPhoto(
  HttpServletRequest req, HttpServletResponse res){
 System.out.println("----- 插入图片 -------");
 try{
  String id = req.getParameter("userId");
  System.out.println(id);
  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
  MultipartFile file = multipartRequest.getFile("imgFile");
  byte[] photo = file.getBytes();
  boolean result = serv.insertUserPhoto(id, photo);
  res.setContentType("text/html;charset=utf8");
  res.getWriter().write("result:" + result);  
 }catch(Exception e){
  e.printStackTrace();
 }
 System.out.println("----- 插入图片end -------");
}
/**
 * 读取用户头像
 * @param req
 * @param res
 */
@RequestMapping(value="/readPhoto.do", method=RequestMethod.GET)
public void readPhoto(HttpServletRequest req, HttpServletResponse res){
 System.out.println("------readPohto-----");
 String id = Utils.getSessionUserId(req);
 try {
  User user = serv.selectUserPhoto(id);
  res.setContentType("image/jpeg");
  res.setCharacterEncoding("utf-8");
  OutputStream outputStream = res.getOutputStream();
  InputStream in = new ByteArrayInputStream(user.getPhoto());
  int len = 0;
  byte[] buf = new byte[1024];
  while((len = in.read(buf,0,1024)) != -1){
   outputStream.write(buf, 0, len);
  }
  outputStream.close();
 } catch (IOException e) {
  e.printStackTrace();
 }
 System.out.println("-----readPohto end-----");
 return;
}

Service实现类


//查找用户图片(头像)
public User selectUserPhoto(String id) throws ImageException {
 User user = userDao.findUserById(id);
 if(user == null){
  throw new UserNameException("用户名不存在!");
 }
 Map<String, Object> data = userDao.selectUserPhoto(id);
 System.out.println(data);
 user.setPhoto((byte[]) data.get("photo"));
 return user;
}
//更新用户图片(头像)
public boolean insertUserPhoto(String userId, byte[] photo) throws ImageException, UserNameException {
 if(userId == null || userId.trim().isEmpty()){
  throw new UserNameException("用户id不存在");
 }
 User user = userDao.findUserById(userId);
 if(user == null){
  throw new UserNameException("用户不存在");
 }
 user.setPhoto(photo);
 int n = userDao.updateUserPhoto(user);
 System.out.println("插入图片:" + n);
 return n==1?true:false;
}

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

数据库的photo是 longblob:

MySQL+SSM+Ajax上传图片问题

mapper映射器:


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

Spring-web.xml配置


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

来源:http://www.cnblogs.com/hxliang/p/6557892.html

标签:ajax,上传,图片
0
投稿

猜你喜欢

  • 详解java中static关键词的作用

    2023-12-02 00:32:00
  • MyBatis多表关联查询的实现示例

    2023-07-06 06:26:49
  • jsp+servlet实现简单登录页面功能(附demo)

    2023-09-24 11:32:28
  • 超详细的Java 问题排查工具单

    2023-02-10 06:02:17
  • springboot2.x整合tkmapper的示例代码

    2021-09-19 11:56:59
  • mybatis批量添加,批量更新之前如何判断是否已经存在

    2022-01-03 20:33:38
  • C语言压缩文件和用MD5算法校验文件完整性的实例教程

    2023-04-01 05:21:49
  • Unity查找游戏物体的六种方式详解

    2021-07-09 18:23:17
  • Android实现列表数据按名称排序、中英文混合排序

    2022-10-18 15:15:57
  • C++形参与实参的区别实例解析

    2023-11-02 23:39:05
  • Android应用退出登录的实现方法

    2023-11-15 19:52:44
  • 浅谈一下SpringCloud中Hystrix服务熔断和降级原理

    2021-10-02 08:46:41
  • 如何查找YUM安装的JAVA_HOME环境变量详解

    2023-04-01 11:48:22
  • Java实现把两个数组合并为一个的方法总结

    2022-08-04 16:30:03
  • 详解Java程序读取properties配置文件的方法

    2022-03-09 17:26:23
  • Spring原生Rpc六种的正确打开方式实现示例

    2021-06-23 19:35:03
  • Mybatis-Plus自动填充更新操作相关字段的实现

    2023-06-04 22:37:12
  • C#计算程序执行过程花费时间的方法

    2022-08-07 08:44:53
  • Android app启动图适配方法实例

    2023-07-31 16:23:34
  • c# 委托和事件实例学习

    2023-07-04 06:25:58
  • asp之家 软件编程 m.aspxhome.com