SpringMVC中的上传下载

前言:

      之前查阅资料,发现上传下载代码层出不穷,整理一份SpringMVC上传下载笔记,springMVC中处理文件上传,基于javaWeb阶段commons组件进行简化。


环境搭建:

一、除导入Spring框架中的jar包外,额外需要

commons-io-xxx.jar
commins-fileupload-xxx.jar

二、装配CommonsMultipartResolver工具类

  • bean的id必须是multipartResolver
  • 可以继续为bean注入参数,设置文件上传约束,如字符集、文件上传大小限制等问题
  • 使用入参后的MultipartFile中的transferTo()方法实现文件上传
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>

控制器代码实现上传

@RequestMapping(value="/testUpload")
public String fileUploadMethod(@RequestParam("desc") String desc,
                               @RequestParam("file")MultipartFile multipartFile,
                               HttpSession session){
    System.out.println("desc = " + desc + ", multipartFile = " + multipartFile + ", session = " + session);
    try {
        //获取upload的真实路径
        String realPath = session.getServletContext().getRealPath("/upload");
        //如upload目录不存在,就新建一个upload目录
        File f = new File(realPath);
        if(!f.exists()){
            f.mkdir();
        }
        //获取文件名
        String filename = multipartFile.getOriginalFilename();
        File file = new File(realPath+File.separator+filename);
        //实现文件上传
        multipartFile.transferTo(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "fileuploadsuccess";
}

文件下载

  • 实现文件下载步骤

    1. 准备下载资源文件
    2. 直接实现文件下载【在处理文件下载的方法中,将方法的返回值类型设置为:ResponseEntity即可。】
      • ResponseEntity:封装了响应行、响应头、响应体的信息。
  • 实现文件下载代码
    jsp页面代码:

<h2>资源库</h2>
<a href="${pageContext.request.contextPath}/filedownload?filename=commons-io-1.4.jar">commons-io-1.4.jar</a><br>
<a href="${pageContext.request.contextPath}/filedownload?filename=hz.jpg">hz.jpg</a><br>

java控制器代码

 @RequestMapping(value="/filedownload")
    public ResponseEntity<byte[]> fileDownMethod(HttpServletRequest request,
                                                 String filename){
        ResponseEntity<byte[]> responseEntity = null;
        try {
            //以绝对路径的方式,获取流资源
            InputStream resourceAsStream = request.getServletContext().getResourceAsStream("/download/" + filename);
            if(resourceAsStream!=null){
                //将流资源转换为字节资源【响应体-文件下载资源】
                byte[] bytes = IOUtils.toByteArray(resourceAsStream);
                //设置响应头【设置当前文件为附件,通知浏览器下载,别打开】
                MultiValueMap<String, String> headers = new HttpHeaders();
                headers.add("Content-Disposition","attachment;filename="+filename);
//            HttpHeaders headerss = new HttpHeaders();

                // public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
                responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);

            }else{
                System.out.println("资源不存在!!!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return responseEntity;
    }

总结:

其中有几处是固定写法,例如通知浏览器不要打开点击下载的文件。用处实现javaee实战中的上传下载,可直接复制使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值