0
我的Web应用程序运行Tomcat 8. .docx文件已正确上载到服务器,并使用jsp中包含的以下Java代码进行下载。Java下载通过添加一个字符损坏.docx文件
File f = new File (Monitor.getPropertyValue("myDir") + (request.getParameter("file")));
String filename=request.getParameter("original");
response.setContentLength((int) f.length());
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader ("Content-Disposition", "attachment; filename="+filename);
InputStream in = new FileInputStream(f);
ServletOutputStream outs = response.getOutputStream();
int bit = 256;
int i = 0;
try {
while ((bit) >= 0) {
bit = in.read();
outs.write(bit);
}
}
catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close();
然而,当我尝试打开下载的文件,它已损坏,Word将不能打开它(没有首先确定它)
当我比较原始文件和下载的文件,然后我注意到,下载的文件在最后有一个额外的字符 - FF(十六进制)
如果我用十六进制编辑器删除这个额外的字符,那么文件打开罚款。
为什么要添加这个额外的字符?
你不应该使用'JSP'下载的二进制文件。改写一个servlet。 – Xvolks
我知道 - 这是我没写的旧代码。你认为这是问题的根源,还是你只是提出了良好的编程习惯? – gordon613
最佳做法。过去我已经做过这样丑陋的事情,并且我学会了不这样做的艰难方式。 – Xvolks