|
Закачка файлов на сервер через сервлет
(Павел Шавель (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();
}
}
Вот собственно и все, что нужно для передачи файлов на сервер.
Ресурсы
|