Téléchargement Du Fichier Grails

J'essaie de créer un site qui permet aux utilisateurs de télécharger n'importe quel type de fichier qu'ils aiment. J'ai bien implémenté cette fonctionnalité, et le fichier est conservé sur le serveur. Plus tard, ils peuvent télécharger le fichier à afficher, mais j'ai du mal à le faire fonctionner.

J'ai utilisé tous les exemples que je peux mettre la main sur, mais ils ont tous tendance à utiliser des fichiers texte comme exemples. Mon problème est que les pdf et de nombreux autres types de fichiers ne sont pas téléchargés correctement. Ils semblent bien télécharger, mais aucun des fichiers ne s'ouvrira réussi. En comparant les fichiers, il semble que la plupart du contenu des fichiers soit correct, mais certaines parties ne le sont pas.

Voici mon code groovy:

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=${file.getName()}")
response.outputStream << file.text
return

Ce code est conservé dans un contrôleur qui est appelé par un lien de téléchargement. J'ai essayé de jouer avec différents types de contenu, mais je ne sais pas lequel je pourrais utiliser pour n'importe quel type - Y en a-t-il un? Tout ce que j'essaie ne résout pas le problème.

Merci pour votre aide.

22
demandé sur bignose 2008-12-28 23:59:07

1 réponses

Le problème est que vous lisez le contenu du fichier dans une chaîne en utilisant "file".texte". Le contenu du fichier est converti avec le codage des caractères du système, même si le contenu est binaire, pas de texte (par exemple. Les fichiers PDF sont binaires) et envoyés au client en utilisant le codage de réponse et modifiant ainsi le contenu binaire. Vous devriez plutôt utiliser une approche différente, comme ceci:

def file = new File(params.fileDir)    
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")

response.outputStream << file.newInputStream() // Performing a binary stream copy
41
répondu Siegfried Puchbauer 2008-12-28 22:32:43