2009-07-07 8 views
2

Je suis nouveau dans le développement web, alors je m'excuse si cette question est noobish. Je veux servir un fichier qui se trouve sur le disque dur du serveur à la demande de l'utilisateur (par exemple, envoyer une pièce jointe HTTP pour déclencher la boîte de dialogue "Enregistrer sous ..." du navigateur) en Javascript. L'utilisateur clique sur un bouton de la page, le serveur génère un fichier de données personnalisé en fonction de certains de ses paramètres de compte (et d'autres paramètres), puis la boîte de dialogue "Enregistrer sous ..." devrait apparaître. Comment dois-je procéder pour implémenter ceci en Javascript?Utiliser Javascript pour envoyer une pièce jointe HTTP à l'utilisateur (ouvrir la boîte de dialogue Enregistrer sous ...)

modifier: pour votre référence, le serveur a Glassfish et Apache

Répondre

2

Jane,

Le dialogue de sauvegarde sous nly apparaît au chargement de la page. Vous devez rediriger votre utilisateur soit directement vers le fichier que vous souhaitez enregistrer, soit vers une page côté serveur qui sert le fichier.

Une fois que vous connaissez l'adresse du fichier, faire quelque chose comme

window.location = http://yourserver.com/generatedfiles/file_2342342.txt 

Sinon, faire quelque chose comme ceci:

window.location = http://yourserver.com/getgeneratedfile.aspx?fileID=2342342 

... qui redirige l'utilisateur vers une page qui alimente le fichier généré. Vous devez ensuite spécifier la disposition de contenu et le nom de fichier dans l'en-tête qui provient de cette page, comme mentionné dans la réponse de Gandalf.

Editer: Ah, vous utilisez Apache. Probablement n'aura pas de fichiers ASPX là-bas alors.

1

Définir l'en-tête de réponse Http:

Content-Disposition: attachment; filename=myfile.txt 

Ou quelque chose comme ça

<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'file.html');">Save this page</a> 
1

La réponse de @ aric est correcte; cependant, window.location entraînera le déclenchement d'événements de chargement/déchargement qui ne sont peut-être pas souhaitables pour votre application. Dans ce cas, vous pouvez probablement diriger une iframe masquée vers l'URL pour que la boîte de dialogue de sauvegarde apparaisse sans perdre l'état de votre page.

De même, 'SaveAs' est probablement une valeur spécifique à IE pour document.execCommand comme doesn't exist in Firefox.

Questions connexes