是否可以从 JSP 下载二进制文件?

Posted

技术标签:

【中文标题】是否可以从 JSP 下载二进制文件?【英文标题】:Is it possible to download a binary file from JSP? 【发布时间】:2010-11-11 03:50:00 【问题描述】:

我认为这很有可能,但我不确定。

我没有直接使用servlet的可能,所以我不得不使用JSP(历史悠久,时间短,你不想听)

所以我认为像下面这样可以:

// PSEUDO-CODE:
// source.jsp
Download your file
<a href="file.jsp?xyz">MyDocument.doc</a>


// file.jsp
<%@page content-type="applicaton/somethig-binary-xyz"%>
byte[] data = getBinaryFromSomeWhere();

int start = 0;
int end = data.length < 1024 ? data.length : 1024;
int written = 0;
while( written < data.length ) 
    out.write( data, start, end );
    writtern += end;
    start = end;
    end += written + data.length < 1024 ? data.length : 1024;


%>

不要过多关注代码。它只显示了这个想法。它将二元数组写入 jsp 输出流。

有可能吗?听起来合理吗?是否有 JSTL 或其他已经处理过的东西?

【问题讨论】:

【参考方案1】:

是的,对通用二进制数据使用“application/octet-stream”。并从导入标签和脚本中删除每个换行符/空格。

<%@ page contentType="applicaton/octet-stream" %><%
byte[] data = getBinaryFromSomeWhere(request.getParameter("xyz"));
response.setHeader("Content-length", Integer.toString(data.length));
response.setHeader("Content-Disposition", "attachment; filename=xyz.bin");
response.getOutputStream().write(data, 0, data.length);
response.getOutputStream().flush();
%>

【讨论】:

contentTypecontent-type 在 Liferay 6 上失败。堆栈溢出不允许我建议单个字符编辑。 java.io.Writer 具有将char[] 作为参数的write(..) 方法,但没有byte[] 的方法(至少在Java 7 中)。 更喜欢:

以上是关于是否可以从 JSP 下载二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

j2ee,jsp,servlet文件下载server端

在 JSP 中上传和下载文件 [关闭]

文件上传下载

java web文件上传与下载

Java中的文件上传和下载

从GitHub下载单个文件