1. 使用springMVC 自带的文件上传bean
springmvc.xml 配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
- package com.aa.controller;
- import java.io.File;
- import java.util.Date;
- 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;
- @Controller
- public class UploadAction {
- @RequestMapping(value = "/fileUpload")
- public String _fileUpload(@RequestParam(value ="file",
- required=false) MultipartFile file,
- HttpServletRequest request, ModelMap model) {
- String path = request.getSession().
- getServletContext().getRealPath("upload");
- String fileName = file.getOriginalFilename();
- File targetFile = new File(path, fileName);
- if(!targetFile.exists()){
- targetFile.mkdirs();
- }
- try {
- file.transferTo(targetFile); //文件保存
- } catch (Exception e) {
- e.printStackTrace();
- }
- model.addAttribute("fileUrl",
- request.getContextPath()+"/upload/"+fileName);
- return "result";
- }
- }
/*
* 直接使用CommonsMultipartResolver 文件上传器
*
*/
@RequestMapping(value="/home/SimpleFileStore/uploadFile1",method={RequestMethod.POST})
public void _uploadFile1(HttpServletRequest request
,HttpServletResponse response) throws IOException{
Long startTime = System.currentTimeMillis();
String docpath = request.getSession().getServletContext().getRealPath("upload");
CommonsMultipartResolver commonsMultipartResolver = new
CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("utf-8"); // 设置编码
// 判断是否有文件上传
if (commonsMultipartResolver.isMultipart(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest =
(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
MultipartFile file = multiRequest.getFile(iter.next());
String path = docpath+File.separator+
(new Date()).getTime()+file.getOriginalFilename();
File storageFile = new File(path);
file.transferTo(storageFile);
}
}
Long endTime = System.currentTimeMillis();
log.debug("耗时 ms:"+(endTime-startTime));
response.getWriter().write(""); //指定form target为iframe可以实现区部刷新
}
2. 使用 List<FileItem> items = upload.parseRequest(request); 分离文件流和 其他控件参数
注意:这种方法与springmvc默认的 上传解析器 冲突 会造成 items获取不到值 必须注释掉下面代码:
springmvc.xml 配置 <!-- <bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> -->
@RequestMapping(value="/home/SimpleFileStore/uploadFile",method={RequestMethod.POST})
public void _uploadFile(HttpServletRequest request,
HttpServletResponse response) throws IOException{
String contentType = request.getContentType();
try {
if(contentType !=null && contentType.startsWith("multipart/")){
FileHelper.storeFile(request,response);
}else{
throw new RuntimeException("不支持的 contentType");
}
} catch (Exception e) {e.printStackTrace();
throw new RuntimeException("storeFile异常");
}
response.getWriter().write("");
}
public static void storeFile(HttpServletRequest request,
HttpServletResponse response) throws Exception{
HashMap<String,String> params = new HashMap<String,String>();
List<FileItem> items = parseMultipartRequest(request);
Iterator<FileItem> iter = items.iterator();
FileItem fileItem = null;
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString(); params.put(name, value);
}else{
/*String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();*/
fileItem = item;
}
}
if(fileItem != null){
String storePath = docStorePath + File.separator+ params.get("fileDirect");
File storeDir = new File(storePath);
if(!(storeDir.exists() && storeDir.isDirectory())){
storeDir.mkdirs();
}
File toStoreFile = new File(storePath +File.separator + params.get("storeFileName"));
fileItem.write(toStoreFile);
}
}
/** * 创建指定文件目录 并返回该目录对象 * @param path * @return */
public static File getOrCreateFile(String path) {
File storeDir = new File(path);
if(!(storeDir.exists() && storeDir.isDirectory())){
storeDir.mkdirs(); return storeDir;
}
/** * 从request中获取表单的每一项 文件流 以及普通控件参数 * @param request * @return * @throws FileUploadException */
public static List<FileItem> parseMultipartRequest(HttpServletRequest
request) throws FileUploadException{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletContext servletContext = request.getSession().getServletContext();
File repository =(File)servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request List items = upload.parseRequest(request);
return items;
}