// 在这里设置HTTP响应头部、类型等相关信息
// 在这里使用response.getOutputStream().write()方法将文件数据写入响应输出流
// 最后记得添加关闭文件输入流和刷新响应输出流的逻辑
File file = new File(filePath);
if (file.exists()) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
response.setContentLength((int) file.length());
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
response.getOutputStream().write(buffer, 0, bytesRead);
}
response.setStatus(HttpServletResponse.SC_OK); // 发送200状态码
/*JSONObject errorResponse = new JSONObject();
errorResponse.put("status",200);
errorResponse.put("message", "File download complete.");//e.getMessage()
response.setContentType("application/json");
response.getWriter().write(errorResponse.toString());*/
fis.close();
response.getOutputStream().flush();
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println("下载耗时: " + duration + "毫秒");
以上下载代码,可以运行。可是 response.getWriter() 和response.getOutputStream() 不能同时用,否则会报错。可我想在下载完毕后,给客户端返回一个类似上面的json,该怎么办?而且,如果我把上面的代码的注释取消掉,response.setContentType 会设置两次(两次不一样),这样不行吧?有办法在下载完毕后,再给客户端返回一个json吗?谢谢指教
--
FROM 120.242.238.*