2017-09-03 1 views
0

Je souhaite pouvoir télécharger un fichier à partir d'un service hérité via un service Web Spring de couche intermédiaire. Le problème actuellement est que je retourne le contenu du fichier et non le fichier lui-même.Spring Web: Télécharger un fichier à partir d'un service via un service Spring

J'ai déjà utilisé FileSystemResource, mais je ne veux pas faire cela, car je veux que Spring redirige et ne crée aucun fichier sur le serveur lui-même.

Voici la méthode:

@Override 
public byte[] downloadReport(String type, String code) throws Exception { 
    final String usernamePassword = jasperReportsServerUsername + ":" + jasperReportsServerPassword; 
    final String credentialsEncrypted = Base64.getEncoder().encodeToString((usernamePassword).getBytes("UTF-8")); 
    final HttpHeaders httpHeaders = new HttpHeaders(); 
    httpHeaders.add("Accept", MediaType.APPLICATION_JSON_VALUE); 
    httpHeaders.add("Authorization", "Basic " + credentialsEncrypted); 
    httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM)); 
    final HttpEntity httpEntity = new HttpEntity(httpHeaders); 
    final String fullUrl = downloadUrl + type + "?code=" + code; 

    return restTemplate.exchange(fullUrl, HttpMethod.GET, httpEntity, byte[].class, "1").getBody(); 
} 
+0

* Le problème actuellement est que je retourne le contenu du fichier et non le fichier lui-même *: qu'est-ce que ce mea n? Que faites-vous, qu'espérez-vous qu'il se passe et que se passe-t-il à la place? –

+0

J'essaie de télécharger un fichier situé dans un autre service Web. Je veux télécharger le fichier. J'obtiens le contenu brut du fichier affiché. –

+0

Cela répond à la partie "que se passe-t-il plutôt". Qu'attendez-vous? –

Répondre

0

Turns out je manque ce paramètre d'annotation dans ma classe * Contrôleur:

produces = MediaType.APPLICATION_OCTET_STREAM_VALUE 

Toute la méthode du contrôleur devrait ressembler à ceci:

@RequestMapping(value = "/download/{type}/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) 
    public ResponseEntity<?> downloadReport(@PathVariable String type, @PathVariable String id) throws Exception { 
     return new ResponseEntity<>(reportService.downloadReport(type, id), HttpStatus.OK); 
    }