Передача бинарного файла клиенту из JSP
Рассмотрим такой сценарий. При заходе на jsp страницу, клиент вводит в поле формы путь к файлу и отсылает ее на сервер. Если путь корректен, то сервер передает соответствующий файл кленту. При этом браузер запрашивает вариант загрузки.
Какой должна быть jsp?
Если запрос не содержит путь к файлу (параметр getfile), тогда выводится html страница с формой для указания пути.
Если содержит, тогда получаем его и устанавливаем параметры заголовка ответа. Дело в том, что когда сервером посылаются не текстовые данные в параметре Content-Type надо указать их тип. Если это бинарный поток, тогда они имеют тип "application/octet-stream". А имя скачиваемого файла браузер узнает из дополнительного параметра Content-Disposition.
Ну а дальше все просто. Открывается поток на чтение указанного файла, определяется выходной поток к клиенту (в данном случае, предопределенный поток out использоваться не может, так как он предназначен только для вывода текстовых данных) и данные из входного передаются в выходной. Вот и все. Конкретная реализация представлена ниже.
//filearchive.jsp
//------------------------------------------
<%@ page import="java.io.*" %>
<%
if(request.getParameter("getfile")!=null)
{//Если в запросе указан путь к файлу
//его будет содержать filename
String filename=request.getParameter("getfile");
//Выставляем заголовок ответа
response.setHeader("Content-Type","application/octet-stream;");
//Выделяем из полного пути файла его имя
String shortname=filename.substring(filename.lastIndexOf("\\")+1,
filename.length());
response.setHeader("Content-Disposition",
"filename=\""+shortname+"\"");
try
{
BufferedInputStream in=new
BufferedInputStream (new FileInputStream (filename));
BufferedOutputStream binout=new
BufferedOutputStream(response.getOutputStream());
int ch=in.read();
while(ch!=-1)
{
binout.write(ch);
ch=in.read();
}
binout.close();
in.close();
}
catch(IOException ioe)
{
out.println("Unable to get access");
}
}
else
{
%>
<html;>
<head;>
<title;>
Files archive
</title>
</head>
<body;>
<%
//Получаем полный собственный URL.
//Он используется в обработчике формы.
String hostURL=request.getRequestURL().toString();
%>
<h1; align="center">Welcome; to our files archive</h1>
<form; action="<%=hostURL%>">
<center;>
Input path to the file: <input; type="text" name="getfile">
<input; type="submit">
</center>
</form>
</body>
</html>
<%
}
%>



Узнай о чем ты на самом деле сейчас думаешь

