У меня есть страница в JSP со списком файлов, которые могут быть загружены пользователем.
Файлы не находятся на локальном сервере, они находятся на удаленном файловом сервере.
Когда пользователь нажимает, чтобы загрузить файл, веб-сервер подключается через TCP к файловому серверу. Веб-сервер загрузит файл и создаст HTTP-ответ для клиента.
Вот мой код:
<%@page language="java"%>
<%@page import="sun.misc.Request"%>
<%@page import="listing.ClientTCPStockage"%>
<%@page import="java.net.InetAddress"%>
<%
out.clearBuffer();
String nomFichier = request.getParameter("fichier");
String adresseStockage = request.getParameter("adresseStockage");
ClientTCPStockage clientStockage = new ClientTCPStockage(InetAddress.getByName(adresseStockage), 2004);
byte donneeFichier[] = clientStockage.getDonneesFichier(nomFichier);
response.setHeader("Content-Disposition", "attachment;filename=\"" + nomFichier + "\"");
response.setHeader("Content-Type", "application/octet-stream;");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Length", String.valueOf(donneeFichier.length));
for(int i = 0; i < donneeFichier.length; i++){
out.write(donneeFichier[i]);
}
%>
Это прекрасно работает для текстовых файлов, таких как .csv или обычный .txt.
но он не работает для других типов, таких как .mp3 или .jpeg .. файлы в конечном итоге повреждены.
Я думаю, что есть проблема с моей кодировкой, но я не могу найти где ..
Вот ответ HTTP-заголовка:
HTTP/1.x 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment;filename="test.mp3"
Accept-Ranges: bytes
Content-Type: application/octet-stream;
Content-Length: 5387668
Date: Sun, 20 Dec 2009 18:52:18 GMT
Спасибо.