一、配置文件:
SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file

<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="10485760"
p:uploadTempDir="fileUpload/temp"
>
</beans:bean>

其中属性详解:
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="10485760" 是上传文件的大小,单位为字节
uploadTempDir="fileUpload/temp" 为上传文件的临时路径。
二、前端界面:
<html>
<head>
<title>信息导入</title>
</head>
<body>
<form action="${ctx}/deviceAccount/uploadFiles" enctype="multipart/form-data" method="post">
上传用户:
<input type="text" name="username" value="admin">
<br/>
导入信息xml文件:<input type="file" name="files">
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
注意要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点
三、java端的代码
@RequestMapping(value = "uploadFiles", method = RequestMethod.POST)
@ResponseBody
public String filesUpload(HttpServletRequest request, HttpServletResponse response, @RequestParam("files") MultipartFile[] files) {
//消息提示
String message = "";
//判断file数组不能为空并且长度大于0
if(files!=null&&files.length>0){
//循环获取file数组中得文件
for(int i = 0;i<files.length;i++){
MultipartFile file = files[i];//根据spring-mvc.xml中的配置,file的最大size限定为10M=10*1024*1024(B)=10485760 bytes
String fileElemName = file.getName();
if(fileElemName==null || fileElemName.trim().equals("")){
continue;
}
String fileName = file.getOriginalFilename();
String fileExtName = fileName.substring(fileName.lastIndexOf(".")+1);
if(fileExtName==null || !fileExtName.equalsIgnoreCase("xml"))
{
message += file.getOriginalFilename()+"文件类型不是xml文件!";
return message;
}
//保存文件
boolean res = saveFile(file,request);
if(res)
{
message += file.getOriginalFilename()+"文件上传服务器成功! ";
//do something......
}
else
{
message += file.getOriginalFilename()+"文件上传服务器失败!";
return message;
}
}
}
else
{
message = "未检测到需要导入的xml文件。";
}
return message;
}
private boolean saveFile(MultipartFile file,HttpServletRequest request) {
// 判断文件是否为空
if (!file.isEmpty()) {
try {
String savePath = request.getSession().getServletContext().getRealPath("/")+accountFolder+"/";
File file_folder = new File(savePath);
//判断上传文件的保存目录是否存在
if (!file_folder.exists() && !file_folder.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file_folder.mkdir();
}
// 文件保存
String filePath = savePath + file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
说明:1、@ResponseBody这个注释设置了返回值是文本内容,而不是url地址;
2、@RequestParam("files") MultipartFile[] files 函数的这个参数,是springMVC框架解析好的从前端传回的文件;参数的那个“files”,必须与前端界面上的input的name一致。
四、MultipartFile类常用的一些方法
String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize() //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest) //保存到一个目标文件中。
2269

被折叠的 条评论
为什么被折叠?



