我认为这很可能,但我不确定。
我不可能直接使用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; } %>
不要太关注代码。它只显示了这个想法。它将bynary数组写入JSP输出流。
有可能吗?听起来合理吗?是否有JSTL或其他已经处理的东西?
是的,对通用二进制数据使用“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(); %>