web-dev-qa-db-fra.com

Renvoyer le fichier dans Spring MVC REST

J'ai le code de service REST ci-dessous qui renvoie un fichier. Le problème est maintenant dans le corps de la réponse sur le client PostMan. Je reçois une réponse brute. Comment puis-je la convertir afin qu'elle affiche le contenu du fichier Pour le client, l’objectif est de renvoyer un fichier à l’utilisateur. Le nom du fichier est "Fichier1.jpeg"

Code:

@RequestMapping(value = URIConstansts.GET_FILE, produces = { "application/json" }, method = RequestMethod.GET)
public @ResponseBody ResponseEntity getFile(@RequestParam(value="fileName", required=false) String fileName,HttpServletRequest request) throws IOException{

    ResponseEntity respEntity = null;

    byte[] reportBytes = null;
    File result=new File("/home/arpit/Documents/PCAP/dummyPath/"+fileName);

    if(result.exists()){
        InputStream inputStream = new FileInputStream("/home/arpit/Documents/PCAP/dummyPath/"+fileName); 


        byte[]out=org.Apache.commons.io.IOUtils.toByteArray(inputStream);

        HttpHeaders responseHeaders = new HttpHeaders();
        responseHeaders.add("content-disposition", "attachment; filename=" + fileName);

        respEntity = new ResponseEntity(out, responseHeaders,HttpStatus.OK);


    }else{

        respEntity = new ResponseEntity ("File Not Found", HttpStatus.OK);
    }


    return respEntity;

}
7
arpit joshi

Le code ci-dessous a résolu mon problème:

@RequestMapping(value = URIConstansts.GET_FILE, produces = { "application/json" }, method = RequestMethod.GET)
public @ResponseBody ResponseEntity getFile(@RequestParam(value="fileName", required=false) String fileName,HttpServletRequest request) throws IOException{

    ResponseEntity respEntity = null;

    byte[] reportBytes = null;
    File result=new File("/home/arpit/Documents/PCAP/dummyPath/"+fileName);

    if(result.exists()){
        InputStream inputStream = new FileInputStream("/home/arpit/Documents/PCAP/dummyPath/"+fileName);
        String type=result.toURL().openConnection().guessContentTypeFromName(fileName);

        byte[]out=org.Apache.commons.io.IOUtils.toByteArray(inputStream);

        HttpHeaders responseHeaders = new HttpHeaders();
        responseHeaders.add("content-disposition", "attachment; filename=" + fileName);
        responseHeaders.add("Content-Type",type);

        respEntity = new ResponseEntity(out, responseHeaders,HttpStatus.OK);
    }else{
        respEntity = new ResponseEntity ("File Not Found", HttpStatus.OK);
    }
    return respEntity;
}
17
arpit joshi

Vous devez utiliser un type de contenu différent au lieu de produire = {application/json "}

Types de contenu 

http://silk.nih.gov/public/[email protected]

Si cela ne fonctionne toujours pas, essayez d'obtenir HttpServletResponse et écrivez vos données de fichier dans Stream avec.

Note :: Récemment, j'ai utilisé response.getOutputStream pour écrire un fichier Excel. Pour certaines raisons, le réglage produit ne fonctionnait pas pour moi.

Vous pouvez également utiliser Firebug dans Firefox pour afficher les en-têtes de réponse. 

2
DhruvG