Spring-MVC-文件上传下载

依赖

xml 复制代码
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

xml配置

xml 复制代码
<!--文件上传配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--请求的编码格式,必须和jsp的pageEncoding属性一致-->
    <property name="defaultEncoding" value="utf-8"/>
    <!--上传文件最大字节数,10M-->
    <property name="maxUploadSize" value="10485760"/>
    <property name="maxInMemorySize" value="40960"/>
</bean>

controller

java 复制代码
@RestController
public class FileController {
    // 文件上传,从请求中读取文件路径
    @RequestMapping("/upload")
    // @RequestParam("file")会将name=file的控件上传的文件封装为CommonsMultipartFile对象,数组实现批量上传
    public String uploadFile(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
        String filename = file.getOriginalFilename();
        if ("".equals(filename)){
            return "redirect:/index.jsp";
        }
        // 上传路径保存设置
        String realPath = request.getServletContext().getRealPath("/upload");
        File realFile = new File(realPath);
        if (!realFile.exists()){
            realFile.mkdir();
        }
        // out/artifacts/SSM_war_exploded/uploadFile
        System.out.println(realFile);
        // 文件读写
        file.transferTo(new File(realFile + "/" + filename));
        return "redirect:/index.jsp";
    }
    // 文件下载,写入响应输出流
    @RequestMapping("/downLoad")
    public String downLoadFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 要下载的文件地址
        String realPath = request.getServletContext().getRealPath("/uploadFile");
        String fileName = "test.txt";
        // 设置响应头
        response.reset();// 清空缓存
        response.setCharacterEncoding("UTF-8");// 设置字符编码
        response.setContentType("multipart/form-data");// 二进制传输数据
        response.setHeader("Content-Disposition",
                "attachment;fileName=" + URLEncoder.encode(fileName,"UTF-8"));
        // 文件读写
        InputStream in = new FileInputStream(new File(realPath,fileName));
        OutputStream out = response.getOutputStream();
        int len = 0;
        byte[] buffer = new byte[1024];
        while ((len=in.read(buffer)) != -1){
            out.write(buffer,0,len);
            out.flush();
        }
        out.close();
        in.close();
        return "ok";
    }
}
相关推荐
步行cgn10 小时前
Spring MVC POST 请求乱码:原因与完整解决方案
java·spring·mvc
步行cgn1 天前
HTTP 请求协议详解
spring·mvc
MoRanzhi12031 天前
第3篇 · 使用 PyQt5 实现 2048 桌面版游戏:MVC 架构与撤销和重做
python·mvc·pyqt5·桌面应用开发·gui开发·2048游戏·撤销与重做
CoderYanger2 天前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
CarIise3 天前
Spring MVC 请求参数绑定与常用注解2
java·spring·mvc
CarIise3 天前
Spring MVC 请求参数绑定与常用注解
java·spring·mvc
萧瑟余晖9 天前
Spring MVC文件上传SSE与WebSocket详解
websocket·spring·mvc
乌暮10 天前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful
萧瑟余晖11 天前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
弈栈录18 天前
Spring MVC 请求处理流程与核心源码解析
后端·架构·mvc