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






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


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

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

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

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

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




Rambler's Top100
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>

<% 
} 
%>


Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95