Rambler's Top100IT • archiv

rus / eng | Логин | Комментарий к колонке | Печать | Почта | Клуб




Колонки


Закачка файлов на сервер через сервлет

 
(Павел Шавель (UsUn))

Эта статья является дополнением к уже опубликованной статье “Технология передачи файлов из браузера в сервлет” Александра Година.

В вышеуказанной статье всесторонне освещена сама технология передачи файлов на сервер из браузера посредством формата multipart/form с полным описанием его структуры. Однако использование на практике указанного подхода довольно затруднительно в силу его низкоуровневости. Я же хочу привести пример передачи файлов на основе уже существующих стандартных библиотек, разработанных IBM.

Пример: пусть нам надо предать на сервер файл и некое текстовое поле (допустим описание этого файла). Прежде всего создадим HTML, содержащий форму для отправки информации на сервер.

<html>
<title>Upload form</title>
<body>
<h2>Fill in the form.</h2>
<form name="sendform" enctype="multipart/form-data"action="http://yourhost:8080/yourservlet" method="post>
<table>
 <tr>
 <td>File description:</td>
 <td>
  <input type="text" name="description ">
 </td>
 </tr>
 <tr>
 <td>File to send:</td>
 <td>
  <input type="File" name="file_send">
 </td>
 </tr>
</table>
<p>
<input type="submit" value="Send">
</p>
</form>
</body>
</html>

Теперь приведем код сервлета, на который приходит данный запрос.

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import com.ibm.useful.http.*;

public class ReceiverServlet extends javax.servlet.http.HttpServlet {

public void doPost(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) throws javax.servlet.ServletException, java.io.IOException
{
  try
{
   //проверка пришел ли запрос в multipart формате
     if(isMultipartFormat(req))
    {

   //разбор формата multipart и помещение информации из запроса в поля объекта
   //класса PostData
     PostData multidata=new PostData(req);

   //извлечение посланной информации
     String fileDescription=multidata.getParameter("description ");
     FileData tempFile=multidata.getFileData("file_send");

               if(tempFile!=null) saveFile(tempFile);

              //ну и дальше какая-то генерация ответа кленту...

 }
catch(Exception e)
{System.out.println(e.toString());}

}

  //функция, проверяющая пришел ли запрос в формате multipart
  private boolean isMultipartFormat(HttpServletRequest req) throws javax.servlet.ServletException, java.io.IOException
{
            String temptype=req.getContentType();
            if(temptype.indexOf("multipart/form-data")!=-1) return true;
            else return false;
}

  //функция, сохраняющая пришедший файл на диск
  private void saveFile(FileData tempFile) throws IOException
{
            File f = new File(“c:\\temp\\” + tempFile.getFileName());
            FileOutputStream fos = new FileOutputStream(f);
            fos.write(tempFile.getByteData());
            fos.close();
}
}

Вот собственно и все, что нужно для передачи файлов на сервер.

Ресурсы




Справка | Условия Copyright © 1999 — 2008, IT • archiv.
В начало | Логин | Комментарий к колонке | Поиск | Почта