SpringMVC RestFulスタイルで簡単なファイルダウンロードを実現


プロファイル
SpringMVCの構成と依存:https://blog.csdn.net/weixin_44953227/article/details/113319129
ファイルダウンロードのController
注意:restFulスタイルは一般的にファイル接尾辞名を切り取り、:.+を加えてファイル接尾辞名を保持します.
package com.pro.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

@RestController
public class FileController {
     

	//   restFul              ,   :.+         
    @RequestMapping(value = "/download/{fileName:.+}")
    public String download(@PathVariable String fileName, HttpServletResponse response, HttpServletRequest request) throws Exception {
     
        System.out.println("download --> " + fileName);
        //        
        String path = request.getServletContext().getRealPath("/upload");

        //1、  response    
        response.reset(); //       ,  buffer
        response.setCharacterEncoding("UTF-8"); //    
        response.setContentType("multipart/form-data"); //       
        //     
        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));

        File file = new File(path, fileName);
        //2、     --   
        InputStream input = new FileInputStream(file);
        //3、     --   
        OutputStream out = response.getOutputStream();

        //4、       
        byte[] buff = new byte[1024];
        int index = 0;
        while ((index = input.read(buff)) != -1) {
     
            out.write(buff, 0, index);
            out.flush();
        }

        //    
        out.close();
        input.close();
        return null;
    }
}

テスト
プロジェクトアクセスを開始するには、次の手順に従います.http://localhost:8080/download/xxx.xx
私のプロジェクトにはaa.pdfのファイルがあり、直接アクセスします.
http://localhost:8080/download/aa.pdf