文件上传
在web开发中一般会有文件上传的操作
一般JavaWeb开发中文件上传使用的 Apache组织的Commons FileUpload组件
SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台参数的名称和表单提交的文件的名称一致
文件上传必须条件
- 表单必须post
- 表单必须有 file 文件域
- 表单的 enctype=“multipart/form-data”
拷贝jar包
准备jsp页面
<fieldset>
<legend>单个文件上传</legend>
<form action="${pageContext.request.contextPath}/upload.do" method="post" enctype="multipart/form-data">
姓名: <input name="username"><br>
头像: <input type="file" name="headImg"><br>
<button type="submit">提交</button>
</form>
</fieldset>
后台代码
SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台方法MultipartFile 参数的名称和表单提交的文件的名称一致
//SpringMVC中使用 MultipartFile file对象接受上传文件,必须保证 后台参数的名称和表单提交的文件的名称一致
@RequestMapping("/upload")
public String singleUpload(MultipartFile headImg,@RequestParam("username")String username) throws IOException {
System.out.println(headImg.getName());//获取上传文件的表单名称
System.out.println(headImg.getContentType());//MIME类型
System.out.println(headImg.getSize());//文件大小
System.out.println(headImg.getOriginalFilename());//获取上传文件的完整名称
//获取上传文件对应的输入流
//InputStream in = headImg.getInputStream();
//创建一个磁盘目录用于保存文件
File destFile= new File("c:/upload");
if(!destFile.exists()) {
destFile.mkdir();
}
//使用uuid作为文件随机名称
String fileName = UUID.randomUUID().toString().replaceAll("-", "");
//使用FileNameUtils获取上传文件名的后缀
String extension = FilenameUtils.getExtension(headImg.getOriginalFilename());// jpg , png 等等
//创建新的文件名称
String newFileName = fileName + "."+extension;
//创建要保存文件的File对象
File file = new File(destFile, newFileName);
//保存文件到本地磁盘
headImg.transferTo(file);
return "redirect:/upload.jsp";
}
配置文件上传解析器
配置文件上传解析器:bean的名字是固定的
使用spring表达式 #{1024*1024}
<!-- 配置文件上传解析器:bean的名字是固定的,底层使用的名称注入 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB -->
<property name="maxUploadSize" value="#{1024 * 1024}"></property>
</bean>
多文件上传
<fieldset>
<legend>单个文件上传</legend>
<form action="${pageContext.request.contextPath}/uploads.do" method="post" enctype="multipart/form-data">
文件1: <input type="file" name="headImgs"><br>
文件2: <input type="file" name="headImgs"><br>
文件3: <input type="file" name="headImgs"><br>
<button type="submit">提交</button>
</form>
</fieldset>
@RequestMapping("/uploads")
public String singleUploads(MultipartFile[] headImgs) throws IOException {
//创建一个磁盘目录用于保存文件
File destFile= new File("c:/upload");
if(!destFile.exists()) {
destFile.mkdir();
}
for (int i = 0; i < headImgs.length; i++) {
MultipartFile headImg = headImgs[i];
//使用uuid作为文件随机名称
String fileName = UUID.randomUUID().toString().replaceAll("-", "");
//使用FileNameUtils获取上传文件名的后缀
String extension = FilenameUtils.getExtension(headImg.getOriginalFilename());// jpg , png 等等
//创建新的文件名称
String newFileName = fileName + "."+extension;
//创建要保存文件的File对象
File file = new File(destFile, newFileName);
//保存文件到本地磁盘
try {
headImg.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
}
}
return "redirect:/upload.jsp";
}