1
resposta

Output Strems + Frameworks web

Quando trabalhamos com frameworks we como o Spring ou JSF e temos que realizar o download de arquivos geralmente encontramos códigos como :

@RequestMapping(path = "/download", method = RequestMethod.GET)
public ResponseEntity<Resource> download(String param) throws IOException {

    // ...

    InputStreamResource resource = new InputStreamResource(new FileInputStream(file));

    return ResponseEntity.ok()
            .headers(headers)
            .contentLength(file.length())
            .contentType(MediaType.APPLICATION_OCTET_STREAM)
            .body(resource);
}

ou

public void download() throws IOException {
    FacesContext fc = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();

    response.reset(); 
    response.setContentType(contentType); 
    response.setContentLength(contentLength); 
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 

    OutputStream output = response.getOutputStream();


    fc.responseComplete(); // 

Neses casos o programador precisar fechar o output stream e dar o flush manualmente ou no caso o Spring e o JSF sabem como fechar e dar o flush automaticamente? após a execução dos métodos a variaél que contem os bytes já ficam elegívis para o GC?

1 resposta
O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!