سؤال

أعتقد أنه ممكن تماما، لكنني لست متأكدا.

ليس لدي إمكانية استخدام 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 أو أي شيء آخر يعالج بالفعل ذلك؟

هل كانت مفيدة؟

المحلول

نعم، استخدم "تطبيق / Octet-Stream" للبيانات الثنائية العامة. وقم بإزالة كل سطر استراحة / مسافة بيضاء من علامات الاستيراد وحول scriptlets.

<%@ 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();
%>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top