Java上传图片功能(思路:前端发送Ajax请求携带表单所有数据,后台接收(file必须使用MultipartFile接收),上传操作:获取上传的路径,获取输入流,需要拼接上传上来图片的名称,创建输出流,在把获取到的名称和路径设置到实体类中,使用IOUtils复制一份即可)
1.前端有一个form表单:
必须满足上传三要素:
A.form表单enctype属性必须为"multipart/form-data"
B.form表单method属性必须为"post"
C.input中type属性必须为"file"
2.前端发送ajax请求(使用ajaxSubmit方法,需要导入jquery-form.js)
// 保存操作绑定修改添加确定按钮点击事件
$("#saveButton").click(function(){
// 发送保存请求,会携带form表单中的所有数据
$("#saveForm").ajaxSubmit({
success: function(msg){
if(msg.success){
// 成功
// 关闭模态框
$("#saveModal").modal("hide");
// 刷新表格
GridManager.refreshGrid("demo-ajaxPageCode");
}else{
// 失败
alert("保存失败");
}
}
})
});
3.后台操作
A.controller层(AjaxResult是封装的一个,响应到前端的成功,和失败信息)
@ResponseBody
@RequestMapping("/save")
public AjaxResult save(Slide slide,MultipartFile photo, HttpServletRequest req){
try {
service.save(slide,photo,req);
return new AjaxResult();
} catch (Exception e) {
e.printStackTrace();
return new AjaxResult(false, "保存失败");
}
}
B.service层
@Override
public void save(Slide slide, MultipartFile photo, HttpServletRequest req) throws IOException {
// 上传操作
// 获取路径
String realPath = req.getServletContext().getRealPath("/upload");
File file2 = new File(realPath);
if(!file2.exists()){
file2.mkdirs();
}
if(photo!=null){
// 获取输入流
InputStream input = photo.getInputStream();
// 拼接名称
String filename = photo.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf("."));
String name = System.currentTimeMillis()+suffix;
// 创建输出流
File file = new File(realPath, name);
FileOutputStream output = new FileOutputStream(file);
// 把name和path设置到slide中
slide.setName(name);
slide.setPath("/upload/"+name);
// 核心代码
IOUtils.copy(input, output);
// 关流
output.close();
input.close();
}
// 判断是添加操作还是修改操作
if(slide.getId()==null){
if(photo!=null){
// 添加操作
mapper.add(slide);
}
}else{
if(photo!=null){
// 查询数据库path
Slide dbSlide = mapper.findById(slide.getId());
File file = new File(realPath, dbSlide.getName());
// 删除图片
if(file.exists()){
file.delete();
}
}
// 修改
mapper.update(slide);
}
}
C.mapper层sql
<!-- void add(Slide slide); -->
<insert id="add">
insert into t_slide(name,path,createDate,enable) values(#{name},#{path},#{createDate},#{enable})
</insert>