Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.140.186.241] |
|
Сообщ.
#1
,
|
|
|
Данный пример иллюстрирует возможность загружать файлы на сервер с помощью HTML форм.
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class UploadServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=windows-1251"; private static final int CR = (int)'\r'; private static final int LF = (int)'\n'; public void init(ServletConfig config) throws ServletException { super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); // HTML форма, отправляемая методом post out.println("‹html›"); out.println("‹head›‹title›UploadServlet‹/title›‹/head›"); out.println("‹body›"); out.println("‹form action=\"UploadServlet\" method=\"post\" enctype=\"multipart/form-data\"›"); out.println("‹input type=file name=ufile›"); out.println("‹input type=submit value=\"Attach\"›"); out.println("‹/form›"); out.println("‹/body›‹/html›"); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Поток, в который будет писаться содержимое (в принципе может быть любой OutputStream) FileOutputStream fos = new FileOutputStream("D:\\ufile"); int[] dataSlice = extractData(request); int i; for(i=0; i fos.write(dataSlice[i]); fos.flush(); fos.close(); // HTML форма отправляемая методом post response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println("‹html›"); out.println("‹head›‹title›UploadServlet‹/title›‹/head›"); out.println("‹body›"); out.println("‹form action=\"UploadServlet\" method=\"post\" enctype=\"multipart/form-data\"›"); out.println("‹input type=file name=ufile›"); out.println("‹input type=submit value=\"Attach\"›"); out.println("‹/form›"); out.println("‹/body›‹/html›"); out.close(); } private int[] extractData(HttpServletRequest request) throws IOException { // Содержимое пришедших байтов их запроса (содержимое приходящего файла) InputStream is = request.getInputStream(); int[] data = new int[request.getContentLength()]; int bytes; int counter = 0; while((bytes=is.read())!=-1) { data[counter]=bytes; counter++; } is.close(); // Определение индексов срезки int i; int beginSliceIndex = 0; // Конечный индекс срезки - длина границы + доп. символы. int endSliceIndex = data.length - getBoundary(request).length()-9; for(i = 0; i < data.length; i++) { // Начальный индекс срезки: после того как встретятся 2 раза подряд \r\n if(data[i] == CR && data[i+1] == LF && data[i+2] == CR && data[i+3] == LF) { beginSliceIndex = i+4; break; } } int[] dataSlice = new int[endSliceIndex-beginSliceIndex+1]; for(i = beginSliceIndex; i<=endSliceIndex; i++) { dataSlice[i-beginSliceIndex]=data[i]; } return dataSlice; } // Поиск границы private String getBoundary(HttpServletRequest request) { String cType = request.getContentType(); return cType.substring(cType.indexOf("boundary=")+9); } } [Автор - d_k] |