前端页面:
使用<input type="file" >生成上传文件的窗口
属性multiple用来设置上传多个文件
属性enctype="multipart/form-data" 用来设置上传形式,mutipart表示多部分
后端接收:
@RequestParam("pets")MultipartFile[] pets
使用@RequestParam注解来接收参数
使用MultipartFile类型来接收文件,使用[ ]来接收多个文件
保存文件到固定文件夹
单个文件
if(null != header){
String originalFilename = header.getOriginalFilename();
header.transferTo(new File("D:/test/"+originalFilename));
}
多个文件
if(null !=pets){
for (MultipartFile pet : pets) {
String originalFilename = pet.getOriginalFilename();
pet.transferTo(new File("D:/test/"+originalFilename));
}
}
保存文件到动态的文件夹
奇怪的情况:
在form表单忘记修改action="#"的内容了,后端PostRequest()的值也没有设置,然而提交表单后,程序莫名其妙的正确运行了。"真是代码能运行就不要改啊"。长见识了。过滤器也通过了(设置有放行“/”)。
输出request.getRequestURL().toString()。发现路径显示http://localhost:8080/,那么是将缺省值当作"/"来处理了。但是但是问题来了,我设置了"/"的映射路径的,我直接登录http://localhost:8080/显示的又是另外的页面。奇怪的冲突。
解决需要动态文件夹路径的获取:
String path = ResourceUtils.getURL("classpath:").getPath();
解决上传文件重名
使用UUID.randomUUID().toString()
使用System.currentTimeMillis(),拼接上面确保唯一
解决文件夹按照日期动态生成:可以通过设计一个工具类来完成
public class WebUtils {
public static String UPLOAD_FILE_DIRECTORY="static/images/upload/";
public static String getUploadFileDirectory(){
return UPLOAD_FILE_DIRECTORY+ new SimpleDateFormat("yyyy/MM/dd").format(new Date());
}
}