Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

Java: ПримерыПередача бинарного файла клиенту из JSP

Передача бинарного файла клиенту из 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>

<% 
} 
%>


Кей С. Хорстманн, Гари Корнелл
"Java 2. Библиотека профессионала. Том 1. Основы"
Подробнее>>
Заказать>>

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


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!