SpringMVC文件下载

基于此篇文章中的一些没有注释的相关问题,今天进行SpringMVC的文件下载的更新:

新方法:

1.控制层,新建一个方法,返回值类型为ResponseEntity<byte[]>的方法,并在其函数的后面添加对应的后台需要处理的参数,比如可以传递FIleName

1

2

3

4

5

6

7

8

9

10

11

/**

    * 文件下载

    *

    * @param id

    * @return

    */

   @GetMapping("/download/")

   public ResponseEntity<byte[]> download(@PathVariable("id") String id) throws IOException {

       File file = xxxService.buildXlsFileById(id);

       return ResponseUtils.buildResponseEntity(file);

   }

2. 编写service返回File文件对象,从Service层中查询数据库操作,并查询文件真正的路径位置,然后返回File对象

1

2

3

4

5

public File buildXlsById(String id){

       //do something to find this file

       File file=new File("1.txt");

       return file;

 3. 编写ResponseUtils中的相关方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

     * 构建下载类

     * @param file

     * @return

     * @throws IOException

     */

    public static ResponseEntity<byte[]> buildResponseEntity(File file) throws IOException {

        byte[] body = null;

        //获取文件

        InputStream is = new FileInputStream(file);

        body = new byte[is.available()];

        is.read(body);

        HttpHeaders headers = new HttpHeaders();

        //设置文件类型

        headers.add("Content-Disposition""attchement;filename=" + file.getName());

        //设置Http状态码

     HttpStatus statusCode = HttpStatus.OK;

        //返回数据

     ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);

        return entity;

    }

  

  4.编写相对应得URL即可

 

老方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

/**

     * 文件下载

     * @Description:

     * @param fileName

     * @param request

     * @param response

     * @return

     */

    @RequestMapping("/download")

    public String downloadFile(@RequestParam("fileName") String fileName,

            HttpServletRequest request, HttpServletResponse response) {

        if (fileName != null) {

            String realPath = request.getServletContext().getRealPath(

                    "WEB-INF/File/");

            File file = new File(realPath, fileName);

            if (file.exists()) {

                response.setContentType("application/force-download");// 设置强制下载不打开

                response.addHeader("Content-Disposition",

                        "attachment;fileName=" + fileName);// 设置文件名

                byte[] buffer = new byte[1024];

                FileInputStream fis = null;

                BufferedInputStream bis = null;

                try {

                    fis = new FileInputStream(file);

                    bis = new BufferedInputStream(fis);

                    OutputStream os = response.getOutputStream();

                    int i = bis.read(buffer);

                    while (i != -1) {

                        os.write(buffer, 0, i);

                        i = bis.read(buffer);

                    }

                catch (Exception e) {

                    // TODO: handle exception

                    e.printStackTrace();

                finally {

                    if (bis != null) {

                        try {

                            bis.close();

                        catch (IOException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                    if (fis != null) {

                        try {

                            fis.close();

                        catch (IOException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                }

            }

        }

        return null;

    }

 

 

转载于:https://www.cnblogs.com/lonecloud/p/5990060.html

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值