文件下载代码在IE中出错,其他浏览器都没问题

时间:2013-05-09 10:34:05

标签: java file-io

我想编写一个代码来从某个位置下载文件。

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)

2 个答案:

答案 0 :(得分:1)

堆栈跟踪似乎在说您的服务器正在尝试从文件系统中打开特定文件,操作系统正在说“不!不允许!”。

但是,如果有什么东西导致IE浏览器要求不同的文件到Firefox和Chrome中请求的文件,那么它是怎么可能的。 p>

我建议您捕获在IE,Firefox和Chrome案例中发出的请求...并检查请求网址和请求参数是否相同。

答案 1 :(得分:0)

内容处理文件名需要编码,不幸的是IE和世界其他地方不同。 一次搜索给了this answer,但这似乎与我制作的版本不同。但试试吧。

或者确保名称是纯ASCII,并且不要在名称中使用“路径”(\)。