Можно ли загрузить двоичный файл из JSP? - PullRequest
1 голос
/ 16 июля 2009

Я думаю, что это вполне возможно, но я не уверен.

У меня нет возможности использовать сервлет напрямую, поэтому я вынужден использовать 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 или другая вещь, которая уже обрабатывает это?

1 Ответ

2 голосов
/ 16 июля 2009

Да, используйте «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();
%>
...