SpringMvc中文件的上传和下载,不需要特意去记,随时用随时拷贝

文件上传

1.引入依赖,导入文件上传的jar包,commons-fileupload , Maven会自动帮我们导入他的依赖包 commons-io包

 <dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.3</version>
</dependency>

2.新建一个jsp,在jsp中有一个form表单

为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <form action="${pageContext.request.contextPath}/upload/uploadResources" method="post"
          enctype="multipart/form-data">
        选择文件:<input type="file" name="uploadFile"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

3.新建一个UploadController

@Controller
@RequestMapping("/upload")
public class UploadController {

    @RequestMapping(value={"/uploadResources"},method = RequestMethod.POST)
    public String uploadResources(Model model, MultipartFile uploadFile){
        try {
            //获取原始的文件名
            String fileName=uploadFile.getOriginalFilename();
            String path="F:\\attachment\\file";
            File saveDir=new File(path);
            if(!saveDir.exists()) saveDir.mkdirs();
            File saveFile=new File(path,fileName);
            uploadFile.transferTo(saveFile);
            model.addAttribute("message","上传成功");

        } catch (IOException e) {
            e.printStackTrace();
            model.addAttribute("message","上传失败");
        }
        return "success";
    }
}

4.在springmvc.xml进行配置

<!--文件上传配置-->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        
        <property name="defaultEncoding" value="utf-8"></property>

        <!-- 上传文件大小上限,单位为字节(10485760=10M) -->

        <property name="maxUploadSize" value="1024000000"></property>
  </bean>

文件下载

 @RequestMapping("/downLoadFile")
    public ResponseEntity<byte[]> downLoadFile(String fileName)throws Exception{

        String path="F:\\attachment\\file";
        File downLoadFile=new File(path,fileName);
        HttpHeaders headers=new HttpHeaders();
        //防止下文件名有乱码
        fileName=new String(fileName.getBytes("utf-8"),"ISO-8859-1");
        headers.setContentDispositionFormData("attachment", fileName);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(downLoadFile),headers, HttpStatus.OK);
    }

简单总结:

前段设置了enctype为multipart/form-data,浏览器会采用二进制流的方式来处理表单数据。

而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。

  • Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。

  • 而Spring MVC则提供了更简单的封装。

  • Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。

  • Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:

  • CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值