SpringMVC 使用MultipartFile类实现文件上传-实例

 

一、配置文件:
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) //保存到一个目标文件中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值