基于Spring6的文件上传与下载

本文详细介绍了如何在Spring6中实现文件上传与下载功能,包括表单配置、Controller代码以及文件下载的链接生成和处理。着重展示了POST请求的表单编码和服务器端的文件操作过程。
摘要由CSDN通过智能技术生成

1、文件上传

从浏览器向客户端上传的过程

1.1表单准备

<form th:action="@{/fileup}" method="post" enctype="multipart/form-data">
    文件上传:<input type="file" name="fileName"><br>
    <input type="submit" value="上传">
</form>
  1. POST请求
  2. 必须设置 表单属性enctype=“multipart/form-data” 默认是application/x-www-form-urlencoded

web.xml中配置

Spring6需要进行此配置


<servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
     <multipart-config>
         <!--设置单个支持最大文件的大小-->
         <max-file-size>102400</max-file-size>
         <!--设置整个表单所有文件上传的最大值-->
         <max-request-size>1024000</max-request-size>
         <!--设置最小上传文件大小-->
         <file-size-threshold>0</file-size-threshold>
     </multipart-config>
 </servlet>
 <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>

1.2 控制器代码

  @PostMapping("/fileup")
  @ResponseBody
  public String fileUp(@RequestParam("fileName") MultipartFile multipartFile,
                       HttpServletRequest request) throws IOException {
      String name = multipartFile.getName();  // 获取的是参数的名字 fileName
      String originalFilename = multipartFile.getOriginalFilename();  // 获取的是文件真实的名字

      // 输入流
      InputStream in = multipartFile.getInputStream();    // 输入流,负责读客服端的文件
      BufferedInputStream bis = new BufferedInputStream(in);
      // 输出流
      ServletContext application = request.getServletContext();
      String realPath = application.getRealPath("/upload");
      File file = new File(realPath);
      System.out.println(realPath);
      if (!file.exists()){
          file.mkdirs();
      }
      File destFile = new File(file.getAbsolutePath() + "/" + UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")));
      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

      // 一边读一边写
      byte [] bytes = new byte[1024 * 10];
       int readCount = 0;
       while ((readCount = bis.read(bytes)) != -1){
           bos.write(bytes,0,readCount);
       }

       bos.flush();
       bos.close();
       bis.close();
  }


2. 文件下载

2.1 下载链接

<a th:href="@{/download}">文件下载</a>

2.1 对应控制器


@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile(HttpServletResponse response, HttpServletRequest request) throws IOException {
    File file = new File(request.getServletContext().getRealPath("/upload") + "/avatar2.jpg");
    // 创建响应头对象
    HttpHeaders headers = new HttpHeaders();
    // 设置响应内容类型
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    // 设置下载文件的名称
    headers.setContentDispositionFormData("attachment", file.getName());

    // 下载文件
    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(Files.readAllBytes(file.toPath()), headers, HttpStatus.OK);
    return entity;
}
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你困了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值