ssm 上传图片到mysql_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配置的异常处理视图网页。

201703161004102.png

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表单:

下面是后台的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 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:

201703161004113.png

mapper映射器:

UPDATE user set id = #{id}, photo = #{photo,jdbcType=BLOB}

WHERE id = #{id}

SELECT id as id, photo as photo from user

WHERE id=#{id}

Spring-web.xml配置

100000

UTF-8

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

本文标题: MySQL+SSM+Ajax上传图片问题

本文地址: http://www.cppcns.com/ruanjian/java/182261.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值