Télécharger blobs localement à l'aide de Safari

J'essaie de trouver un moyen de naviguer en croix pour stocker localement les données dans HTML5. J'ai généré un morceau de données dans un Blob ( voir MDN ). Maintenant, je souhaite déplacer ce Blob vers le système de fichiers réel et l'enregistrer localement. J'ai trouvé les moyens suivants pour ce faire;

  • Utilisez l'attribut <a download> . Cela fonctionne uniquement dans Chrome.
  • Microsoft introduit une fonction saveAs dans IE 10 qui permettra d'atteindre cet objectif.
  • Ouvrez l'URL Blob dans le navigateur et enregistrez-le de cette façon.

Aucun de ceux-ci semble fonctionner dans Safari cependant. Alors que (1) fonctionne dans Chrome, (2) dans IE et (3) dans Firefox, personne ne fonctionne dans Safari 6. L'attribut de téléchargement n'est pas encore implémenté et lorsque vous essayez d'ouvrir un blob à l'aide de l'URL Safari se plaint que les URL commencent par blob: Ne sont pas des URL valides.

Il existe un bon script qui encapsule (1) et (3) appelé FileSaver.js mais cela ne fonctionne pas en utilisant la dernière version de Safari.

Existe-t-il un moyen d'économiser Blobs localement de manière croisée?

FileSaver.js a été mis à jour récemment et fonctionne sur IE10, Safari5 + etc.

Voir: https://github.com/eligrey/FileSaver.js/#supported-browsers

Le nom du fichier est nul, mais cela fonctionne pour moi dans Safari 8:

  window.open('data:attachment/csv;charset=utf-8,' + encodeURI(csvString)); 

MISE À JOUR: ne fonctionne plus dans Safari 9.x

La seule solution que je viens de faire est de faire des données: url à la place. Pour moi, cela ressemble à:

 window.open("data:image/svg+xml," + encodeURIComponent(currentSVGString)); 

Avez-vous lu cet article? http://updates.html5rocks.com/2012/06/Don-t-Build-Blobs-Construct-Them

En ce qui concerne http://caniuse.com/#search=blob , des blobs peuvent être utilisés en safari.

Vous devez constater une servlet qui délivre le blob via http: // url standard, afin que vous puissiez éviter d'utiliser blob: url. Il suffit de faire une demande à cette url et de construire votre blob.

Ensuite, vous pouvez l'enregistrer dans votre système de fichiers ou votre stockage local.

Ici, les données sont les données du tampon de réseau provenant de la réponse tout en faisant appel à http rest dans js. Cela fonctionne en safari, mais il me faudra un problème dans le nom de fichier, car il ne se fait pas de titre.

  var binary = ''; var bytes = new Uint8Array( data ); var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode( bytes[ i ] ); } var base64 = "data:"+contentType+";base64,"+window.btoa( binary ); var uri = encodeURI(base64); var anchor = document.createElement('a'); document.body.appendChild(anchor); anchor.href = uri; anchor.download = fileName; anchor.click(); document.body.removeChild(anchor);