我知道这有点宽泛,但情况如下:
我正在使用JSP和Java。我的服务器上有一个文件。我想添加一个指向屏幕的链接,当单击该链接时,将打开该文件供用户查看。该文件可以显示在Web浏览器的窗口中,也可以弹出打开文件所需的程序(类似于使用iText输出到屏幕时,Adobe打开以显示文件)。我已经知道我的输出流了,但是如何将文件写入输出流?我读过的大部分内容只涉及文本文件,但我也可能正在处理图像文件等。
任何帮助表示赞赏! 谢谢!
答案 0 :(得分:2)
您需要在响应中添加某些字段。对于text / csv,你可以这样做:
response.setContentType("text/csv"); // set MIME type
response.setHeader("Content-Disposition", "attachment; filename=\"" strExportFileName "\"");
这是sun关于它的论坛。
答案 1 :(得分:1)
您需要创建一个'download'servlet,它将文件写入具有正确mime类型的响应输出流。您无法在.jsp文件中可靠地执行此操作。
我们通常使用'download servlet'来设置servletmapping到/ downloads,然后附加路径信息以识别要服务的资产。 servlet验证请求是否有效,设置mime头然后将文件传递到输出流。它很简单,但在执行时保持J2EE javadoc很方便。
答案 2 :(得分:1)
这是一个关于如何实现它的简单实现:
protected void doPost(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
// extract filename from request
// TODO use a whitelist to avoid [path-traversing][1]
File file = new File(getFileName(request));
InputStream input = new FileInputStream(file);
response.setContentLength((int) file.length());
// TODO map your file to the appropriate MIME
response.setContentType(getMimeType(file));
OutputStream output = response.getOutputStream();
byte[] bytes = new byte[BUFFER_LENGTH];
int read = 0;
while (read != -1) {
read = input.read(bytes, 0, BUFFER_LENGTH);
if (read != -1) {
output.write(bytes, 0, read);
output.flush();
}
}
input.close();
output.close();
}