Glassfish / Java / JS: сохранить файл изображения в сервлет и загрузить его на веб-страницу - PullRequest
0 голосов
/ 20 марта 2012

Как сохранить изображение на сервлете? И как отправить его обратно на веб-страницу?

Этот сервлет получает запрос от JS с вводом файла (изображение). Я хочу сохранить картинку (возможно, в списке -db не нужен), а затем сервлет отправляет ответ со всем, что он получил (вместе с фотографией).

Есть какие-нибудь предложения? Я безуспешно пытался с этим кодом:

 response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();

    out.println("</HEAD>\n");
    out.println("<BODY>\n" +                     
                "<TABLE>\n" +
                "<TR>\n" +
                "<TH>--Asked Infos--" +
                "<TH>--Your Input--");

    /*for typical inputs from the form */
    Enumeration paramNames = request.getParameterNames();                
    while( paramNames.hasMoreElements() ) 
    {
          String paramName = (String)paramNames.nextElement();
          out.println("<TR><TD>" + paramName + "\n<TD>");
          String[] paramValues = request.getParameterValues(paramName);

          String paramValue = paramValues[0];
          if ( paramValue.length() == 0 ){
               /* .... store a default photo from servlet 'cause user didn't give file...*/
          }
          out.print(paramValue);

    }

    /* file input */
String fileName = request.getParameter("avatar");/*avatar is the file input name from JS*/       
    FileInputStream fis = new FileInputStream(new File("C:\\"+fileName));
    BufferedInputStream bis = new BufferedInputStream(fis);  
    BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
    for (int data; (data = bis.read()) > -1;) 
    {
            output.write(data);
    }

     out.println("</TABLE>\n</BODY></HTML>"); 

1 Ответ

1 голос
/ 20 марта 2012

Способ загрузки файла - создание формы с помощью <input type="file" name="avatar">. Для фактической загрузки внутри сервлета лучше использовать фильтр сервлетов Apache или Spring upload. Для поиска этого кода в Интернете - хороший пример.


Ссылка здесь , для поддержки новейшей поддержки JavaEE6 (сервер Apache Geronimo, но Glassfish должен быть таким же). До JEE6 требовался дополнительный код, фильтр сервлета.

...