202 votes

Télécharger les données de l'url du fichier

Je suis en train de jouer avec l'idée de faire un complètement basé sur javascript zip/unzip utility que n'importe qui peut accéder à partir d'un navigateur. Ils peuvent juste glisser leur zip directement dans le navigateur et il vous laisse les télécharger tous les fichiers à l'intérieur. Ils peuvent également créer de nouveaux fichiers zip par faire glisser des fichiers dans.

Je sais que ce serait mieux de le faire serverside, mais ce projet est juste pour un peu de plaisir.

Faites glisser des fichiers dans le navigateur devrait être assez facile si je profite des différentes méthodes disponibles. (gmail style)

Encodage/décodage devrait, espérons-le bien. J'ai vu quelques as3 zip bibliothèques, donc je suis sûr que je devrais être bien avec.

Mon problème est le téléchargement des fichiers à la fin..

window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....' 

cela fonctionne très bien sous firefox mais pas sur chrome.

Je peux intégrer les fichiers comme des images, il suffit de trouver dans google chrome à l'aide de <img src="data:jpg/image;ba.." />, mais les fichiers habitude nécessairement être des images. Ils pourraient être n'importe quel format.

Quelqu'un peut-il penser à une autre solution ou une sorte de contourner?

291voto

owencm Points 271

Si vous aussi vous voulez donner une suggestion de nom pour le fichier (au lieu de la valeur par défaut "téléchargement") vous pouvez utiliser la commande suivante dans google Chrome:

function downloadURI(uri, name) {
  var link = document.createElement("a");
  link.download = name;
  link.href = uri;
  link.click();
}

Et l'exemple suivant montre l'utilisation:

downloadURI("data:HelloWorld!", "helloWorld.txt");

56voto

Pekka 웃 Points 249607

Idées:

  • Essayez un <a href="data:...." target="_blank"> (non testé)

  • Utilisation downloadify au lieu de données d'Url (à travailler pour IE ainsi)

15voto

Il y a plusieurs solutions, mais elles dépendent de HTML5 et n'ont pas été complètement mis en œuvre dans certains navigateurs encore. Les exemples ci-dessous ont été testés dans Chrome et Firefox (en partie les travaux).

  1. Toile exemple avec l'option enregistrer dans un fichier. Il suffit de régler votre document.location.href pour les données de l'URI.
  2. Ancre exemple de téléchargement. Il utilise <a href="your-data-uri" download="filename.txt"> de spécifier de nom de fichier.

2voto

Brett Zamir Points 5355

On peut aussi lancer des données URL téléchargements via JavaScript. Voir http://stackoverflow.com/a/13696029/271577 une telle solution (avec lien vers le texte des exemples).

0voto

Piskvor Points 46986

Votre problème se résume essentiellement à "pas tous les navigateurs l'appui de cette".

Vous pourriez essayer une solution de contournement et de servir les fichiers décompressés à partir d'un objet Flash, mais alors vous perdez le JS-seulement la pureté (de toute façon, je ne suis pas sûr de savoir si vous pouvez "glisser les fichiers dans le navigateur, sans une sorte de Flash solution de contournement - est une fonctionnalité HTML5 peut-être?)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X