我试图在表单提交后从我的本地文件系统下载文件。我正在使用以下代码获取FileInputStream并写入HttpServletResponse。
PrintWriter out = response.getWriter();
response.setCharacterEncoding("UTF-8");
String filename = "DSR.xlsx";
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
FileInputStream fileInputStream = new FileInputStream("C://Users/Metro/Desktop/DSR.xlsx");
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
文件正在下载但文件已损坏。它只适用于文本文件。我希望代码能够用于.xlsx,.pdf,.jpg等。
答案 0 :(得分:0)
问题在于ContentType。
您必须设置与文件扩展名相关的内容类型。
对于excel
response.setContentType("application/vnd.ms-excel")
对于pdf
response.setContentType("application/pdf")
对于jpg
response.setContentType("image/jpeg")
[请参阅此链接以了解所有mime类型]
答案 1 :(得分:0)
我使用java.nio.file.Files.copy(Path source,OutputStream out)解决了这个问题。
response.setCharacterEncoding("UTF-8");
String filename = "DSR.xlsx";
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
try (OutputStream out = response.getOutputStream()){
File toBeCopied = new File("C://Users/Metro/Desktop/DSR.xlsx");
Path path = toBeCopied.toPath();
Files.copy(path, out);
out.flush();
}catch(IOException e){
e.printStackTrace();
}
适用于任何文件类型(.jpg,.xlsx,.pdf)