方法一:
javaConfig配置类文件
@Bean
public MultipartResolver multipartResolver () throws IOException{
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setUploadTempDir(new FileSystemResource("/WEB-INF/upload"));
multipartResolver.setMaxUploadSize(1024*1024*20);
multipartResolver.setMaxInMemorySize(0);
return multipartResolver;
}
控制器代码:
@RequestMapping("/register")
public String register(HttpServletRequest request,@Valid User user,Errors errors,@RequestPart("files")byte[]profile) throws IllegalStateException, IOException{
if(errors.hasErrors()){
return "tleaf";
}
long startTime=System.currentTimeMillis();
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
if(file!=null)
{
String path="E:/springUpload"+file.getOriginalFilename();
//上传
file.transferTo(new File(path));
}
}
}
long endTime=System.currentTimeMillis();
System.out.println("方法1的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "success";
}
前端代码:
<form th:object="${user}" method="POST" th:action="@{/register}" enctype="multipart/form-data">
<div th:if="${#fields.hasErrors('*')}">
<ul>
<li th:each="err:${#fields.errors('*')}" th:text="${err}">输入有误</li>
</ul>
</div>
<label th:class="${#fields.hasErrors('username')}?'error'">用户名</label>
<input type="text" th:field="*{username}" th:class="${#fields.hasErrors('username')}?'error'">
<span th:if="${#fields.hasErrors('username')}" th:text="${#fields.errors('username')}"></span>
<label th:class="${#fields.hasErrors('password')}?'error'">用户名</label>
<input type="text" th:field="*{password}" th:class="${#fields.hasErrors('password')}?'error'">
<label>选择文件</label>
<input type="file" name="files" accept="image/jpeg,image/png,image/gif"/>
<input type="submit" value="提交"/>
</form>
方法二:
前端 javaconfig配置类代码与上面一样。
控制器代码如下:
@RequestMapping("/register")
public String register(@RequestParam("files") CommonsMultipartFile file) throws IllegalStateException, IOException{
long startTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
String path="E:/"+new Date().getTime()+file.getOriginalFilename();
File newFile=new File(path);
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo(newFile);
long endTime=System.currentTimeMillis();
System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "success";
}
方法三:
配置前端同方法一
控制器代码:
@RequestMapping("/register")
public String register(@RequestParam("files") CommonsMultipartFile file) throws IllegalStateException, IOException{
//用来检测程序运行时间
long startTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
try {
//获取输出流
OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());
//获取输入流 CommonsMultipartFile 中可以直接得到文件的流
InputStream is=file.getInputStream();
int temp;
//一个一个字节的读取并写入
while((temp=is.read())!=(-1))
{
os.write(temp);
}
os.flush();
os.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime=System.currentTimeMillis();
System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "success";
}