J'utilise Jhipster. J'utilise docx4j pour créer un fichier .docx.Envoyer le fichier .docx du serveur au client dans l'application jhipster
Je veux télécharger ce fichier .docx du serveur au client.
Mais le fichier que je télécharge est corrompu.
côté serveur:
je produis mon dossier et le mettre dans un octet []
WordprocessingMLPackage p = null;
...
File f = new File(filePath);
p.save(f);
byte[] stream = Files.readAllBytes(f.toPath());
J'ai essayé de l'envoyer au client dans un format différent:
octet []
octet [] encodé Base64
Chaîne
chaîne base64
Un exemple de ce qui ressemblent à ma méthode:
// send back as String encoded in Base64
public ResponseEntity<FileDTO> getFile(@PathVariable Long id) throws URISyntaxException, IOException {
FileDTO result = fillRepository.findOne(id);
byte[] stream = FileUtil.getFile(id) // retrieve file as byte[]
byte[] encoded = Base64.encodeBase64(stream);
String encodedString = new String(encoded, "UTF-8");
result.setFile(encodedString);
return ResponseUtil.wrapOrNotFound(Optional.ofNullable(result));
}
côté client:
Je récupère mon dossier comme octet [] ou chaîne et je l'ai mis dans un blob à télécharger.
FileService.get({id: id}, function(result) {
var res = result.file;
// var res = Base64.decode(result.file);
vm.blob = new Blob([res], {type: 'data:attachment;charset=utf-8;application/vnd.openxmlformats-officedocument.wordprocessingml.document'});
vm.url = (window.URL || window.webkitURL).createObjectURL(vm.blob);
});
Mon service est déclarée comme ceci:
(function() {
'use strict';
angular
.module('myApp')
.factory('FileService', FileService);
FileService.$inject = ['$resource', 'DateUtils'];
function FileService($resource, DateUtils) {
var resourceUrl = 'api/file/:id/generate';
return $resource(resourceUrl, {}, {
'get': {
method: 'GET',
responseType:'arraybuffer'
}});}})();
Lorsque je télécharge le mot de fichier dire:.
« Nous sommes désolés Nous ne pouvons pas ouvrir file.docx parce que nous avons trouvé un problème avec son contenu. "
Et quand je compare mon fichier original et celui téléchargé dans notepad ++ par exemple, je vois que le contenu binaire est pas exactement le même comme il y avait des problèmes encode/decode ...
Aussi la taille ne sont pas les mêmes :
fichier original 13Ko
fichier téléchargé 18Ko
Pourriez-vous me aider à savoir comment et pourquoi le fichier téléchargé est corrompu.