JAVA实现从服务器下载文件,将下载文件转成文件流响应给前端

本文记录了一位开发者在实现文件下载功能时遇到的问题及解决方案。最初,由于对需求理解不清晰,将文件下载到本地磁盘,而实际只需要提供文件路径。在调整代码后,通过与服务器建立连接,实现了前端通过接口直接下载。在联调过程中,发现控制器层的返回值导致了转换器错误,修改为`void`后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.刚开始的时候我不知道具体的需求,然后还走了很多弯路,甚至还把数据下载到了自己的电脑上的磁盘中,但其实后端要做的只是接收前端传回的路径,然后与服务器建立连接,然后响应前端就行

2.代码

public void downLoadFile(
        HttpServletResponse response,
        @RequestParam(name = "resultId") @ApiParam(value = "结果ID") String resultId
) throws IOException {
    SxProResult result = sxProResultService.selectResultByResultId(resultId);
    // 文件路径
    String resultValue = result.getResultValue();
    // 文件地址的全路径
    String httpUrl = filePrefix + resultValue;
    ServletOutputStream out = null;
    try {
       // 与服务器建立连接
        URL url = new URL(httpUrl);
        URLConnection conn = url.openConnection();
        InputStream inputStream = conn.getInputStream();
        try {
            //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
            response.setContentType("multipart/form-data");
        } catch (Exception e){
            e.printStackTrace();
        }
        out = response.getOutputStream();
        // 读取文件流
        int len = 0;
        byte[] buffer = new byte[1024 * 10];
        while ((len = inputStream.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        out.flush();
    } catch (Exception e){
        e.printStackTrace();
    }
}

3.在其中遇到的问题,最终接口写好后,与前端联调的过程中,发现前端能正常下载文件,但是后台会报一个转换器的错误,

 百度之后发现,是我Controller层的文件下载不能有返回值,当时我写的返回值是Result<?>,后面改成void之后解决了

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值