Segue um exemplo de como desenvolver um Servlet para download de arquivos realizando a integração com Flex.
Vamos ao Servlet:
package com.xxx.business.services;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.agriness.produto31.business.db.entities.Usuario;
import com.agriness.produto31.business.dto.Arquivo;
import com.agriness.produto31.commons.AccessProperties;
import com.agriness.produto31.core.exception.BusinessException;
import com.agriness.produto31.recurso310003.business.services.ArquivoDownload;
public class ServletDownloadFile extends HttpServlet {
private static final long serialVersionUID = -1783732558472851554L;
@Override
@SuppressWarnings("unchecked")
protected void service(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
ArquivoDownload arqDown = new ArquivoDownload();
Arquivo arq = new Arquivo();
arq.setNome(request.getParameter("nome"));
arq.setExtensao(request.getParameter("extensao"));
arqDown.setArquivo(arq);
arqDown.setCaminho("/download/");
PrintWriter printwriter = response.getWriter();
if (arqDown.getArquivo().getNome().length() == 0) {
response.setContentType("text/html");
printwriter.println("Nome do arquivo inválido");
printwriter.flush();
printwriter.close();
return;
}
if (arqDown.getCaminho() == null) {
response.setContentType("text/html");
printwriter.println("Caminho do arquivo inválido");
printwriter.flush();
printwriter.close();
return;
}
File file = new File(arqDown.getCaminho()
+ arqDown.getArquivo().getNome());
if (file == null) {
response.setContentType("text/html");
printwriter.println("Arquivo não pode ser lido");
printwriter.flush();
printwriter.close();
return;
}
if (!file.exists() || !file.canRead() || file.isDirectory()) {
response.setContentType("text/html");
if (!file.exists())
printwriter.println("Arquivo inexistente");
else if (file.isDirectory())
printwriter.println("O arquivo é um diretório");
else
printwriter.println("Arquivo não pode ser lido");
printwriter.flush();
printwriter.close();
return;
}
response.setHeader("Content-Disposition", "attachment; filename = "
+ arqDown.getArquivo().getNome());
response.setContentType("octet-stream");
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
response.setContentLength((int) file.length());
FileInputStream fis = new FileInputStream(file);
OutputStream os = response.getOutputStream();
int byteCount = 0;
try {
do {
byteCount = fis.read(buffer);
if (byteCount == -1)
break;
os.write(buffer, 0, byteCount);
os.flush();
} while (true);
} catch (Exception excp) {
excp.printStackTrace();
} finally {
os.close();
fis.close();
}
}
}
Segue o código Flex:
public function executaDownloadFromUrl( url:String ):void{
if( url == null ){
return;
}
var u:URLRequest = new URLRequest(url);
navigateToURL(u);
}
Monte a url conforme os atributos definidos no Servlet.
ex: http://meudominio.com/Servlet/?nome=nomeArquivo&extensao=.pdf





