如何用JSP提供文件?

Osc*_*Ryz 8 java jsp binary-data java-ee

这可能听起来很愚蠢,但却是现实生活中的一个案例:(

我能够显示带有"虚拟"链接名称的HTML表.

像这样的东西:

Xyz description   <a href="docId=123">document.doc</a>

Xyz description  <a href="docId=456">documentB.doc</a>

Xyz description  <a href="docId=798">documentC.doc</a>
Run Code Online (Sandbox Code Playgroud)

此doc id表示数据库中的id(对于这些docs存储在blob中为byte [])

无论如何.我能够获取该ID,查询数据库并检索byte [](甚至将其存储在tmp文件中)

我无法弄清楚该怎么做,当用户点击链接时(以及我执行数据库检索后),将"["]字节[]提供给用户.

现在最糟糕的部分,是什么让我在这里问这个问题,我需要用JSP(没有servlet)和没有第三方库(只是......不要问我为什么我也讨厌它)这样做

所以.我如何在jsp中提供存储在服务器文件系统中的字节数组的二进制内容

我的第一位客人是:

<%
InputStream read // read the file form the fle system 
response.getOutputStream().write( theBytesReader );
%>
Run Code Online (Sandbox Code Playgroud)

我接近解决方案了吗?

这对客户端是否有效,就好像他真的在服务器中点击了真正的文件一样?

提前致谢.

Bal*_*usC 5

至关重要,只需在JSP中编写相同的代码,就像在Servlet类中一样.你几乎可以复制它.只确保您没有将任何模板文本写入流中,这包括scriptlet外部的换行符和空格.否则它也会被写入二进制文件并破坏它.

如果您有多个scriptlet块,则需要对它们进行排列,以便在%>scriptlet 的结尾和下一个scriptlet的开始之间没有换行符<%.因此,例如

<%@page import="java.io.InputStream" %><%
    //...
%>
Run Code Online (Sandbox Code Playgroud)

代替

<%@page import="java.io.InputStream" %>
<%
    //...
%>
Run Code Online (Sandbox Code Playgroud)