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

2年前 (2022) 程序员胖胖胖虎阿
209 0 0

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.在其中遇到的问题,最终接口写好后,与前端联调的过程中,发现前端能正常下载文件,但是后台会报一个转换器的错误,JAVA实现从服务器下载文件,将下载文件转成文件流响应给前端

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

相关文章

暂无评论

暂无评论...