0

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

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)
4

2 回答 2

1

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

但是,浏览器是什么让我无法理解……除非有什么东西导致 IE 请求与 Firefox 和 Chrome 中请求的文件不同的文件。

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

于 2013-05-09T11:26:04.757 回答
0

内容配置文件名需要编码,不幸的是 IE 和世界其他地方不同。一次搜索给出了这个答案,但这似乎与我曾经制作的版本不同。但是试试看。

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

于 2013-06-07T07:08:01.653 回答