На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Java FAQ
1. Данный раздел предназначен только для публикации готовых статей, с вопросами обращайтесь в соответствующие подразделы.
2. Все вопросы, связанные с ошибками или неточностями в представленных материалах направляйте модераторам персональным сообщением.
3. Все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут доступны остальным участникам после одобрения модераторами.
Модераторы: dark_barker, wind
  
> Загрузка файлов на сервер с помощью Java , статья из старых Java FAQ
    Данный пример иллюстрирует возможность загружать файлы на сервер с помощью HTML форм.

    ExpandedWrap disabled
      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]
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0187 ]   [ 16 queries used ]   [ Generated: 28.03.24, 15:07 GMT ]