上传下载文件流程

1、编写工具类

public class FileUtil {

    /**
     * 通过文件地址下载文件
     *
     * @author yys
     * @Date 2022-12-20 15:49:49
     * @Param [path:文件路径, request, response]
     * @return void
     **/
    public static void downloadFile(String path,HttpServletRequest request, HttpServletResponse response) {
        try {
            //关键点,需要获取的文件所在文件系统的目录,定位准确才可以顺利下载文件
            File file = new File(path);
            
            //创建一个输入流,将读取到的文件保存到输入流
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 重要,设置response的Header
            String name = file.getName();
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(name.getBytes("utf-8"),"ISO8859-1"));
            response.setHeader("Content-Length", "" + file.length());
            //octet-stream是二进制流传输,当不知文件类型时都可以用此属性
            response.setContentType("application/octet-stream");
            //跨域请求,*代表允许全部类型
            response.setHeader("Access-Control-Allow-Origin", "*");
            //允许请求方式
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
            //用来指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求
            response.setHeader("Access-Control-Max-Age", "3600");
            //请求包含的字段内容,如有多个可用哪个逗号分隔如下
            response.setHeader("Access-Control-Allow-Headers", "content-type,x-requested-with,Authorization, x-ui-request,lang");
            //访问控制允许凭据,true为允许
            response.setHeader("Access-Control-Allow-Credentials", "true");
            //创建一个输出流,用于输出文件
            OutputStream oStream = new BufferedOutputStream(response.getOutputStream());
            //写入输出文件
            oStream .write(buffer);
            oStream .flush();
            oStream .close();
            System.out.println("下载文件" + name +"成功");
        } catch (Exception e) {
            System.out.println("下载文件出错,错误原因:" + e);
        }
    }
}

2.控制器:通过文件流上传文件

public static final String UP_LODE_FOLDER = "D:/renren/uploadPath/yingjiEnterprisePlan/";
/**
 * 企业文件上传
 *
 * @author yys
 * @Date 2022-12-20 11:07:46
 * @Param [file]
 * @return io.renren.commons.tools.utils.Result
 **/
@PostMapping("/fileUpload")
@ApiOperation("应急预案附件上传")
@LogOperation("应急预案附件上传")
public Result otherPicturesUpload (@RequestParam("file") MultipartFile file)  {
    try{
        String originalFilename = file.getOriginalFilename();
        String flag = IdUtil.fastSimpleUUID();
        String rootFilePath =UP_LODE_FOLDER+ flag + "/" + originalFilename;
        FileUtil.writeBytes(file.getBytes(),rootFilePath);
        return new Result<>().ok(rootFilePath);
    }catch (IOException e){
        return new Result<>().error(e.getMessage());
    }
}

3.控制器下载接口

通过map传路径

地址及其map参数举例/emergency/parkplan/preview?filePath=D:\renren\uploadPath\yingjiParkPlan

注意不要使用ajax,使用js跳转之类的

/**
 * 下载接口
 *
 * @author yys
 * @Date 2022-12-26 15:31:15
 * @Param [map, request, response]
 * @return io.renren.commons.tools.utils.Result
 **/
@GetMapping("/preview")
public Result selectVersions(@RequestParam Map<String,String> map, HttpServletRequest request, HttpServletResponse response){
    String filePath = map.get("filePath");
    if (filePath!=null){
        io.renren.utils.FileUtil.downloadFile(filePath,request,response);
        return new Result<>().ok("下载成功");
    }else {
        return new Result<>().error("文件未上传,下载失败");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值