大家新年好,这一篇,我们来说说springmvc的文件上传。
- 【SpringMvc】从零开始学SpringMvc之初始化(一)
- 【SpringMvc】从零开始学SpringMvc之数据库(二)
- 【SpringMvc】从零开始学SpringMvc之实现用户登录(三)
- 【SpringMvc】从零开始学SpringMvc之实现用户管理(四)
- 【SpringMvc】从零开始学SpringMvc之文件上传(五)
首先,需要在配置springmvc-servlet.xml中配置MultipartResolver
<!-- springMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
在WEB-INF/html文件夹下创建upload.html
这里介绍2个方法,
1.采用multipart提供的file.transfer方法上传文件
在upload.html中添加form表单
<h1>采用multipart提供的file.transfer方法上传文件2</h1>
<form name="form2" action="/SpringMvc/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file_03" /> <input type="submit" value="fileupload" />
</form>
创建FileController,并添加upload方法
@Controller
@RequestMapping("/file")
public class FileController extends BaseController {
@RequestMapping("")
public String index() {
return "upload";
}
/**
* 单个文件
*
* @param file
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/upload")
public BaseModel upload(@RequestParam(value = "file_03", required = false) MultipartFile file,
HttpServletRequest request) {
if (file == null || file.isEmpty()) {
return makeModel(ERROR_CODE, "文件不存在");
}
String fileName = file.getOriginalFilename();
File targetFile = new File("D:/ch", getTemFileName(fileName));
if (!targetFile.exists()) {
targetFile.mkdirs();
}
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return makeModel(SUCC_CODE, "上传成功");
}
}
需要注意的是,upload方法中的value需与form表单中的name字段保持一致;
通常情况下,我们需要对上传的文件进行重命名
/**
* 获取文件后缀
*
* @param name
* @return
*/
public static String subType(String name) {
if (isEmpty(name)) {
return "";
}
int index = name.lastIndexOf(".");
if (index >= 0) {
return name.substring(index);
}
return "";
}
/**
* 获取临时文件名
*
* @param fileName
* @return
*/
public static String getTemFileName(String fileName) {
return getTemple() + subType(fileName);
}
public static String getTemple() {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return format.format(new Date());
}
我们在浏览器中输入http://localhost:8080/SpringMvc/file/,然后选择文件,点击上传,之后在我们自定义的文件夹下,即可看到我们上传的文件。
2.使用spring MVC提供的方法上传文件
在upload.html中添加form表单
<h1>使用spring MVC提供的方法上传文件</h1>
<form name="form2" action="/SpringMvc/file/uploadspring" method="post" enctype="multipart/form-data">
<input type="file" name="file_04" />
<input type="submit" value="fileupload" />
</form>
在FileController中添加uploadspring方法
/**
* 多个文件
*
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/uploadspring")
public BaseModel uploadspring(HttpServletRequest request) {
// CommonsMutipartResolver
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 遍历
Iterator<?> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
//
MultipartFile file = multiRequest.getFile(iter.next().toString());
if (file != null) {
//
File targetFile = new File("D:/ch", getTemFileName(file.getOriginalFilename()));
if (!targetFile.exists()) {
targetFile.mkdirs();
}
try {
file.transferTo(targetFile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return makeModel(SUCC_CODE, "上传成功");
}
return makeModel(ERROR_CODE, "文件不存在");
}
return makeModel(ERROR_CODE, "文件不存在");
} else {
return makeModel(ERROR_CODE, "文件不存在");
}
}
跟方法一一样,我们在浏览器中输入http://localhost:8080/SpringMvc/file/,然后选择文件,点击上传,之后在我们自定义的文件夹下,即可看到我们上传的文件。
网友评论