Friday, March 2, 2012

Re: Upload File

Hi Leonardo,

I use Apache FileUpload to manage the process:

http://commons.apache.org/fileupload/

Here's the doPost() method from my FileUploadServelet:

@Override
public void doPost(HttpServletRequest p_request,
HttpServletResponse p_response)
throws ServletException, IOException
{
ServletFileUpload upload = new ServletFileUpload();

/*
* This tracks the state of the upload progress. The client
will
* occasionally request a progress update; the doGet() method
* returns this information to the client in an XML structure.
*/
FileUploadProgress progress = new FileUploadProgress();
HttpSession session = p_request.getSession();
session.setAttribute("progress", progress);
upload.setProgressListener(progress);

try
{
FileItemIterator iter = upload.getItemIterator(p_request);
StringBuilder response = new StringBuilder();
Integer id = null;
while (iter.hasNext())
{
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField())
{
String value = Streams.asString(stream);
if ("id".equals(name))
{
id = Integer.valueOf(value);
}
if ("saveAs".equals(name))
{
if (id == null)
{

p_response.sendError(SC_INTERNAL_SERVER_ERROR,
"No filesystem id for " + name + " " +
value);
return;
}
File f =
ClientFileSystemBridge.createTempFile(value);
ClientFileSystemBridge.put(id, value, f);
}
response.append(name).append(' ')
.append(value).append('\n');
}
else
{
String filename = item.getName();
if (id == null)
{
p_response.sendError(SC_INTERNAL_SERVER_ERROR,
"No filesystem id for file " + filename);
return;
}
File f =
ClientFileSystemBridge.createTempFile(filename);
OutputStream out = new FileOutputStream(f);
try
{
// This WILL fail with
org.mortbay.jetty.EofException
// if the client form disappears before we've
read the
// entire stream.
int bytes;
byte buf[] = new byte[32768];
while ((bytes = stream.read(buf)) > 0)
out.write(buf, 0, bytes);
}
catch (Throwable t)
{
p_response.sendError(SC_INTERNAL_SERVER_ERROR,
t.getClass().getName() + " " +
t.getMessage());
t.printStackTrace();
}
finally
{
out.close();
stream.close();
}
ClientFileSystemBridge.put(id, filename, f);
response.append(name).append(' ').
append(f.length()).append(' ').
append(filename).append('\n');
}
}
String message = response.toString();
p_response.reset();
p_response.setContentType("text/plain");
p_response.setContentLength(message.length());
Writer writer = p_response.getWriter();
writer.append(message);
writer.flush();
}
// catch (FileUploadException e)
// {
// p_response.sendError(SC_INTERNAL_SERVER_ERROR,
e.getMessage());
// e.printStackTrace();
// }
catch (Throwable e)
{
p_response.sendError(SC_INTERNAL_SERVER_ERROR,
e.getMessage());
e.printStackTrace();
}
}

And a helper function for reporting progress:

import org.apache.commons.fileupload.ProgressListener;

public class FileUploadProgress implements ProgressListener
{
private volatile long m_bytesRead;
private volatile long m_contentLength;
private volatile int m_item;

public FileUploadProgress()
{
super();
}

public void update(long p_bytesRead, long p_contentLength, int
p_item)
{
m_bytesRead = p_bytesRead;
m_contentLength = p_contentLength;
m_item = p_item;
}

public long getBytesRead()
{
return m_bytesRead;
}

public long getContentLength()
{
return m_contentLength;
}

public int getItem()
{
return m_item;
}
}

On Mar 2, 5:26 am, Leonardo Terrão <leonardoter...@gmail.com> wrote:
> Hello everybody!
>
> Following are some examples found right here in the discussion group
> took two classes below.
>
> In my class I have ArquivoUpload umTextBox a form with a ListBox and a
> FileUpload. In class FileUploadServlet're getting only the data from
> the FileUpload. Could someone help me also take the data from the
> TextBox?
> In debug mode I see everything that is in the form of the request but
> I can not extract the values​​.
>
> public class ArquivoUpload implements EntryPoint {
>
>         public static final String UPLOAD_ACTION_URL = GWT.getModuleBaseURL()
> + "upload";
>
>         @Override
>         public void onModuleLoad() {
>
>                 // Cria um FormPanel e apontá-lo para um serviço.
>                 final FormPanel form = new FormPanel();
>                 form.setAction(UPLOAD_ACTION_URL);
>
>                 // Porque nós vamos adicionar um widget FileUpload, vamos precisar
> para
>                 // definir o
>                 // Form usar o método POST, e codificação MIME multipart.
>                 form.setEncoding(FormPanel.ENCODING_MULTIPART);
>                 form.setMethod(FormPanel.METHOD_POST);
>
>                 // Cria um painel para conter todos os elementos do formulário.
>                 VerticalPanel panel = new VerticalPanel();
>                 form.setWidget(panel);
>
>                 // Criar um TextBox, dando-lhe um nome para que ele será submetido.
>                 final TextBox tb = new TextBox();
>                 tb.setName("TextBoxFormElement");
>                 panel.add(tb);
>
>                 // Criar um ListBox, dando-lhe um nome e alguns valores que devem
> ser
>                 // associados
>                 // Com suas opções.
>                 ListBox lb = new ListBox();
>                 lb.setName("listBoxFormElement");
>                 lb.addItem("foo", "fooValue");
>                 lb.addItem("bar", "barValue");
>                 lb.addItem("baz", "bazValue");
>                 panel.add(lb);
>
>                 // Criar um widget FileUpload.
>                 final FileUpload upload = new FileUpload();
>                 upload.setName("uploadFormElement");
>                 panel.add(upload);
>
>                 panel.add(new UploadForm());
>
>                 // Adicionar um botão 'Enviar'.
>                 panel.add(new Button("Submit", new ClickHandler() {
>                         public void onClick(ClickEvent event) {
>                                         form.submit();
>                         }
>                 }));
>
>                 //Adicionar um manipulador de eventos para o formulário.
>                 form.addSubmitHandler(new FormPanel.SubmitHandler() {
>
>                         @Override
>                         public void onSubmit(SubmitEvent event) {
>
>                                 if (upload.getFilename().equals("")) {
>                                         event.cancel();
>                                         return;
>                                 }
>
>                                 //Este evento é disparado pouco antes do formulário é submetido.
>                                 //Podemos aproveitar esta oportunidade para realizar a validação.
>                                 String filename= upload.getFilename();
>                                 int index = filename.lastIndexOf(".");
>                                 String ext = filename.substring(index + 1);
>                                 if (!(ext.equals("gif") || ext.equals("jpg") || ext.equals("GIF")
> || ext.equals("JPG"))){
>                                         Window.alert("Extensão de arquivo inválida. Por favor adicione
> apenas arquivos com extensões .jpg ou .gif.");
>                                         event.cancel();
>                                 }
>                         }
>                 });
>
>                 form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler()
> {
>                         @Override
>                         public void onSubmitComplete(SubmitCompleteEvent event) {
>                                 ///Quando o envio do formulário é concluída com êxito,
>                                 //este evento é acionado. Assumindo que o serviço retornou
>                                 //uma resposta do tipo text / html, podemos obter o texto
> resultado aqui
>                                 //(consulte a documentação FormPanel para mais explicações).
>                                 Window.alert(event.getResults());
>                                 System.out.println(event.getResults());
>                         }
>                 });
>                 RootPanel rootPanel = RootPanel.get();
>                 rootPanel.add(form);
>         }
>
> }
>
> public class FileUploadServlet extends HttpServlet {
>
>         private static final String UPLOAD_DIRECTORIY = "C:\\uploaded\\";
>
>         @Override
>         protected void doGet(HttpServletRequest req, HttpServletResponse
> resp)
>                         throws ServletException, IOException {
>                 super.doGet(req, resp);
>         }
>
>         @SuppressWarnings("unchecked")
>         @Override
>         protected void doPost(HttpServletRequest req, HttpServletResponse
> resp)
>                         throws ServletException, IOException {
>
>                 // processar apenas as solicitações de várias
>                 if (ServletFileUpload.isMultipartContent(req)) {
>
>                         // Criar uma fábrica de artigos baseados em disco de arquivos
>                         FileItemFactory factory = new DiskFileItemFactory();
>
>                         // Crie um manipulador de novo upload de arquivos
>                         ServletFileUpload upload = new ServletFileUpload(factory);
>
>                         // Analisar o pedido
>                         try {
>
>                                 List<FileItem> items = upload.parseRequest(req);
>
>                                 for (FileItem item : items) {
>
> //                                       processo só upload de arquivo - descartar outros tipos de
> //                                       item do form
>                                          if (item.isFormField()) continue;
>
> //                                       pega o nome do arquivo
>                                         String fileName = item.getName();
>
> //                                       pega extensão do arquivo
>                                         int index = fileName.lastIndexOf(".");
>                                         String ext = fileName.substring(index + 1);
>                                         ext = "." + ext;
>                                         System.out.println(ext);
>
>                                         // obter apenas o nome do arquivo não o caminho todo
>                                         if (fileName != null) {
>                                                 fileName = FilenameUtils.getName(fileName);
>                                         }
>
>                                         File uploadedFile = new File(UPLOAD_DIRECTORIY, fileName);
>                                         if (uploadedFile.createNewFile()) {
>                                                 item.write(uploadedFile);
>                                                 resp.setStatus(HttpServletResponse.SC_CREATED);
>                                                 resp.getWriter().println("O arquivo foi criado com sucesso.");
>                                                 resp.flushBuffer();
>                                         } else
>                                                 throw new IOException(
>                                                                 "O arquivo já existe no repositório.");
>                                 }
>
>                         } catch (Exception e) {
>                                 resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
>                                                 "Ocorreu um erro ao criar o arquivo: " + e.getMessage());
>                         }
>
>                 } else {
>                         resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE,
>                                         "Tipo de conteúdo pedido não é suportado pelo servlet.");
>                 }
>         }
>
> }
>
> Thank you!

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment