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之后解决了