sexta-feira, 28 de setembro de 2007

Upload em Flex

Pessoal, a seguir estou postando um exemplo de upload utilizando Flex, Livecycle e um servlet multipart data. Como podemos ver é algo muito similar ao upload em aplicações baseadas em JSP.
Arquivos principais a serem criados:

  1. upload.mxml
  2. Servlet.java

Aplicação de exemplo:

Código fonte upload.mxml


package papu10;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
* Servlet implementation class for Servlet: ServletUpload
*
*/
public class ServletUpload extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
/*
* (non-Java-doc)
*
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
public ServletUpload() {
super();
}

// Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

// Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean isMultiPart = FileUpload.isMultipartContent(request);
if (isMultiPart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//String formulario = "";
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
/*if (item.getFieldName().equals("tipoForm")) {
formulario = item.getString();
}*/
if (!item.isFormField()) {
if (item.getName().length() > 0) {
this.inserirImagem(item);
}
}
}
}
catch (FileUploadException ex) {
ex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}

/**
*
*
*
* @param item
* FileItem, representa um arquivo que é enviado pelo formulario
*
* MultiPart/Form-data
*
* @throws IOException
*
*/

private void inserirImagem(FileItem item) throws IOException {

// Pega o diretório /logo dentro do diretório atual de onde a
// aplicação está rodando
String caminho = getServletContext().getRealPath("/upload")
+ "/";
// Cria o diretório caso ele não exista
File diretorio = new File(caminho);
if (!diretorio.exists()){
diretorio.mkdir();
}
// Mandar o arquivo para o diretório informado
String nome = item.getName();
String arq[] = nome.split("\\\\");
for (int i = 0; i < arq.length; i++) {
nome = arq[i];
}
File file = new File(diretorio, nome);
FileOutputStream output = new FileOutputStream(file);
InputStream is = item.getInputStream();
byte[] buffer = new byte[2048];
int nLidos;
while ((nLidos = is.read(buffer)) >= 0) {
output.write(buffer, 0, nLidos);
}
output.flush();
output.close();
}
}


Bibliotecas necessárias para este exemplo:

  1. commons-fileupload-1.2.jar

  2. commons-io-1.3.2.jar


Podem ser encontradas neste link: Apache commons


    Vale lembrar que este exemplo não realiza upload aqui pois não foi ativado um servlet para isto.

    Abs

    2 comentários:

    Anônimo disse...

    O link para ver o exemplo do arquivo mxml é inválido.

    Será que o código poderia ser postado aqui? Ou o arquivo disponibilizado de outra forma?

    Grato.

    Kemerson disse...

    Também gostaria do código do upload.mxml.

    Caso ele pudesse ser disponibilizado de alguma outra forma, ficaria muito agradecido!

    by by Spark (sparkbr@sparkbr.com)