springmvc的文件上传

spring提供commonsMultipartResolver解析器,用于实现文件上传功能(其实还是借助commons的文件上传jar)。

实现步骤:

1.导入jar包:

   commons-fileupload-1.3.1

   commons-io-2.2

   commons-logging-1.0.4

 

2.在form表单中,需要设置method="post",还要设置enctype="multipart/form-data"

 

3.在Controller中,可以直接通过commonsMultipartResolver解析器的api方法来实现解析请求中的文件流数据

//获取上传文件的原名
String filename = file.getOriginalFilename();

//根据file取出流,上传到文件系统
file.transferTo(targetFile); //spring的api会自动实现把文件保存到服务器上

4. 在spring主配置文件 application.xml 中设置使用文件上传解析器

// 匹配文件上传解析器multipartResolver (id必须为这个名字)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
//可以配置一些设置信息,如限制文件大小等
</bean>

 注意:若设置了Restful风格,需要指定静态资源匹配(静态资源映射)

<mvc:resources location="/file/" mapping="/file/**"></mvc:resources>

 

 

一、单文件上传示例

//Controller页面

@RequestMapping("file1")
public String fileupload1(MultipartFile file1,HttpServletRequest request){
     //获取上传的文件原名
     String filename = file1.getOriginalFilename();
     //获取服务器真实物理路径
     String realPath = request.getServletContext().getRealPath("file");
     File targetFile = new File(realPath,filename); //路径为 /应用名/file/文件名
     if(!targetFile.exists()){ //判断文件是否存在,如果不存在则创建文件和其父文件夹
         targetFile.mkdirs(); //递归创建当前文件的父文件夹
     }
     //上传到服务器的文件系统中
     try {
         file1.transferTo(targetFile);//根据file1取出流,上传到文件系统
         String url = request.getContextPath() + File.separator + "file" + File.separator + filename; //拼接文件的路径位置
         request.setAttribute("url", url);
     } catch (IllegalStateException | IOException e) {
         e.printStackTrace();
     } 
     return "fileupload/fileView";
     }


//jsp页面

<form action="${basePath}/upload/file1" method="post" enctype="multipart/form-data">
    <input type="file" name="file1">
    <input type="submit" value="上传">
</form>
View Code

 

二、多文件上传示例(方法和单文件上传基本一致,下面为注意点)

 1. 表单上放多个file类型的input,并且name值一样
 2. MultipartFile[]类型接收 
 3. @RequestParam("files")  :files为页面提交的name值

//controller 代码 

@RequestMapping("file2")
     public String fileupload2(@RequestParam("files")MultipartFile[] files,HttpServletRequest request){
        List<String> urls = new ArrayList<String>();
         for(MultipartFile file : files){
             String filename = file.getOriginalFilename();
             String realPath = request.getServletContext().getRealPath("file");
             File targetFile = new File(realPath,filename);
             if(!targetFile.exists()){
                 targetFile.mkdirs();
             }
             try {
                file.transferTo(targetFile);
                 String url = request.getContextPath() + File.separator + "file" + File.separator + filename;
                 urls.add(url);
            } catch (IllegalStateException | IOException e) {
                e.printStackTrace();
            }
         }
         request.setAttribute("urls",urls);
        return "fileupload/fileView";
     }

//jsp 页面代码

<form action="${basePath}/upload/file2" method="post" enctype="multipart/form-data">
        <input type="file" name="files">
        <input type="file" name="files">
        <input type="submit" value="上传">
</form>

//用c标签遍历输出
<c:forEach items="${urls}" var="u">
    <img alt="" src="${u}">
</c:forEach>
View Code

 

转载于:https://www.cnblogs.com/motianjie/p/7828143.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值