html表单提交图片存入数据库,SpringMvc上传图片及表单提交(单文件+实体类参数提交)...

本文详细介绍了如何在Spring MVC项目中处理文件上传,包括设置上传配置、前端表单、MultipartFile的使用、文件验证、上传路径管理以及错误处理。重点在于解决实际问题和代码示例的整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天做项目用到了Springmvc的文件上传来上传图片,由于和这个普通的Java文件上传处理流程不太一样,所以做的时候碰了壁,一顿百度,博客,要不就是一部分代码,要不就是看不懂,用不会的代码,下面来放上我找到的,代码量还可以,

1.需要的炸包儿

commons-io-1.3.2.jar

commons-lang-2.6.jar

commons-fileupload-1.2.1.jar

2.定义springmvc配置文件的上传文件的bean:

3.前台必须的form表单,post提交,enctype="multipart/form-data",表单框框name还是实体类字段

注意:file文件域的name值不能和实体类相同,因为controller要使用@RequestParam(value = "up_file", required = false) MultipartFile multipartFile单独接收 明显能看出前台file文件域的name属性要是和实体类属性名不可能封装到一起,所以单拎出来使用MultipartFile 接收。

4.Controller里定义一个变量接收file的文件名赋值给实体类然后传给数据库

//准备变量放入实体类 放入数据库

String filename = null;

5.使用isEmpty判断刚才接收的file文件是否为空  if (!multipartFile.isEmpty())

6.准备上传工作,

//1.定义上传的目标路径"static" + File.separator + "upload"         静态资源文件夹 分隔符      存放img的文件夹

String path = request.getSession().getServletContext().getRealPath("static" + File.separator + "ProductImg");//2.获取源文件名

String oldFileName =multipartFile.getOriginalFilename();//3.获取源文件的后缀 FilenameUtils工具类的getExtension方法

String suffix =FilenameUtils.getExtension(oldFileName);//4.获取源文件的大小

long size = multipartFile.getSize();

7.判断上传的文件是否大于配置文件里定义的大小和定义及判断文件后缀名

if (size > 454000) {

request.setAttribute("uploadFileError", "上传文件大小不能超过500kb");return "ProductAdd";

}else if (suffix.equalsIgnoreCase("jpg") ||

suffix.equalsIgnoreCase("png") || //判断 这些是符合要求的图片格式

suffix.equalsIgnoreCase("jpeg") ||

suffix.equalsIgnoreCase("pneg"))

8.防止用户上传的图片文件名一样,处理文件名:

String NewFileName = System.currentTimeMillis() + RandomUtils.nextInt(100000) + "." + suffix;

9.开始上传:

File targetFile = newFile(path, NewFileName);if (!targetFile.exists()) {

targetFile.mkdirs();//判断这个文件是否存在

}//写入 上传

try{

multipartFile.transferTo(targetFile);

}catch(IOException e) {

e.printStackTrace();

request.setAttribute("uploadFileError", "上传失败了! 哦,谢特~");return "ProductAdd";

}

filename= NewFileName; //将处理好的上传的文件的名字传入变量存进数据库

} else{//大小可以 格式不符合

request.setAttribute("uploadFileError", "上传文件的格式不正确");return "ProductAdd";

}

}

10.将一开始定义的存放文件名的变量的值赋值给实体类:

xx.setFileName(filename);

11.处理你form表单的其他字段的信息调用业务方法增删改,然后返回view

最注意的一点:前台file文件域的name属性值 不能和实体类名一致

整体代码:

@RequestMapping(value = "FileAdd", produces = {"text/html;charset=UTF-8;"})public String AddPRo(ProDuct product, @RequestParam(value = "up_file", required = false) MultipartFile multipartFile,

HttpServletRequest request) {//准备变量放入实体类 放入数据库

String filename = null;/*上传文件*/

if (!multipartFile.isEmpty()) {//四步准备//1.定义上传的目标路径"static" + File.separator + "upload"

String path = request.getSession().getServletContext().getRealPath("static" + File.separator + "ProductImg");//2.获取源文件名

String oldFileName =multipartFile.getOriginalFilename();//3.获取源文件的后缀 FilenameUtils工具类的getExtension方法

String suffix =FilenameUtils.getExtension(oldFileName);//4.获取源文件的大小

long size =multipartFile.getSize();if (size > 454000) {

request.setAttribute("uploadFileError", "上传文件大小不能超过500kb");return "ProductAdd";

}else if (suffix.equalsIgnoreCase("jpg") ||suffix.equalsIgnoreCase("png") || //判断 这些是符合要求的图片格式

suffix.equalsIgnoreCase("jpeg") ||suffix.equalsIgnoreCase("pneg")) {//定义上传的文件名

String NewFileName = System.currentTimeMillis() + RandomUtils.nextInt(100000) + "." +suffix;//将即将上传的文件定义

File targetFile = newFile(path, NewFileName);if (!targetFile.exists()) {

targetFile.mkdirs();//判断这个文件是否存在

}//写入 上传

try{

multipartFile.transferTo(targetFile);

}catch(IOException e) {

e.printStackTrace();

request.setAttribute("uploadFileError", "上传失败了! 哦,谢特~");return "ProductAdd";

}

filename= NewFileName; //将处理好的上传的文件的名字传入变量存进数据库

} else{//大小可以 格式不符合

request.setAttribute("uploadFileError", "上传文件的格式不正确");return "ProductAdd";

}

}

product.setFilename(filename);if(productService.addProduct(product)) {

request.setAttribute("ProList", "Ok");return "redirect:product/ProAdd";//* return map.put("OkShowProduct", ProDuct);*//*

} else{

request.setAttribute("ProList", "No");return "redirect:product/ProAdd";

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值