SpringBoot环境下java实现文件的下载

思路:文件下载,就是给服务器上的文件创建输入流,客户端创建输出流,将文件读出,读入到客户端的输出流中,(流与流的转换)

package com.cst.icode.controller;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

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

import com.cst.util.file.Files;
import com.cst.util.file.Files.CstDir;


@RestController
@RequestMapping("/file")
public class TestController {
	
	@GetMapping("/froalar/get/{path}")
	public Object getFroalarFile(@PathVariable String path,HttpServletResponse re) {
		path=path.replace(":", File.separator);
		// 平台的下载文件根路径
		File uploadRoot = Files.getDir(CstDir.upload);//=后面是要获得下载的文件的路径
		File downloadDir = new File(uploadRoot,  File.separator+path);
		return downloadFile(downloadDir,re);
	}
	private OutputStream downloadFile(File file,HttpServletResponse re) {
		if (file.exists()) {
            byte[] buffer = new byte[1024];
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                int i = bis.read(buffer);
                OutputStream os = re.getOutputStream();
                while (i != -1) {
                	os.write(buffer,0,i);
                    i = bis.read(buffer);
                }
                return os;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
		return null;
	}

}

  

原文地址:https://www.cnblogs.com/chcha1/p/11313677.html