我想编写一个代码来从某个位置下载文件。
String filePath = policyLocation;
File f = new File(filePath+"/"+fileName);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
response.setContentLength((int) f.length());
BufferedInputStream fileInput = new BufferedInputStream(new FileInputStream(f));
byte buffer[] = new byte[8 * 1024];
java.io.PrintWriter out = response.getWriter();
OutputStream out_s = new Writer2Stream(out);
copyStreamsWithoutClose(fileInput, out_s, buffer);
fileInput.close();
out_s.flush();
public static void copyStreamsWithoutClose(InputStream in, OutputStream out, byte[] buffer)
throws IOException {
int b;
while ((b = in.read(buffer)) != -1)
out.write(buffer, 0, b);
}
但它仅为IE浏览器提供错误。一切都适用于Firefox和Chrome
java.io.FileNotFoundException: D:\jboss-4.2.0.GA\Policies\HR (Access is denied)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(FileInputStream.java:106)
com.edifixio.ems.policiesandforms.action.PolicyFileDownloader.downloadHRPolicyFile(PolicyFileDownloader.java:34)
com.edifixio.ems.servlet.FileDisplayServlet.doPost(FileDisplayServlet.java:271)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
答案 0 :(得分:1)
堆栈跟踪似乎在说您的服务器正在尝试从文件系统中打开特定文件,操作系统正在说“不!不允许!”。
但是,如果有什么东西导致IE浏览器要求不同的文件到Firefox和Chrome中请求的文件,那么它是怎么可能的。 p>
我建议您捕获在IE,Firefox和Chrome案例中发出的请求...并检查请求网址和请求参数是否相同。
答案 1 :(得分:0)
内容处理文件名需要编码,不幸的是IE和世界其他地方不同。 一次搜索给了this answer,但这似乎与我制作的版本不同。但试试吧。
或者确保名称是纯ASCII,并且不要在名称中使用“路径”(\
)。