spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。
1、在SpringMVC的配置文件中新增插件配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置最大上传文件大小(以字节为单位)-->
<property name="maxUploadSize" value="104857600"/>
<!-- 设置缓存大小 -->
<span style="white-space:pre"> </span><property name="maxInMemorySize" value="1024">
</bean>
2、页面实现上传
<form action="Multipart/user.form" method="post"
enctype="multipart/form-data">
upload:<input type="file" id="upload" name="upload"><input type="submit" value="upload">
<br>
</form>
3、后台代码处理
方式一:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.mvc.web.util.sys.SystemConfig;
@Controller
@RequestMapping("/Multipart")
public class MultipartController {
@RequestMapping("/user.form")
public ModelAndView userUpload(
@RequestParam(value = "upload", required = false) MultipartFile multi,
HttpServletRequest request, ModelMap model) {
if(multi.isEmpty()){
return new ModelAndView("hello");
}
try {
byte[] bytes = multi.getBytes();
File file = new File(SystemConfig.UPLOAD_USER_PATH , (new Random().nextInt(900000) + 100000) + "_"
+ multi.getOriginalFilename());
FileOutputStream out = new FileOutputStream(file);
BufferedOutputStream os = new BufferedOutputStream(out);
os.write(bytes);
os.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return new ModelAndView("hello");
}
}
方式二:
@RequestMapping("/user.form")
public String fileUpload2(@RequestParam("upload") CommonsMultipartFile file) throws IOException {
long startTime=System.currentTimeMillis();
String path = SystemConfig.UPLOAD_USER_PATH
+ (new Random().nextInt(900000) + 100000) + "_"
+ file.getOriginalFilename();
File multifile = new File(path);
//通过CommonsMultipartFile的方法写入文件
file.transferTo(multifile);
return "hello";
}
方式三:
@RequestMapping("/user.form")
public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException
{
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 = SystemConfig.UPLOAD_USER_PATH
+ (new Random().nextInt(900000) + 100000) + "_"
+ file.getOriginalFilename();
//上传
file.transferTo(new File(path));
}
}
}
return "hello";
}
以上即是简单的SpringMVC文件上传功能实现。