J'autorise l'utilisateur à charger des images dans une page par glisser-déposer et d'autres méthodes. Lorsqu'une image est supprimée, j'utilise URL.createObjectURL
pour convertir en une URL d'objet pour afficher l'image. Je ne révoque pas l'URL, car je la réutilise.
Donc, quand vient le temps de créer un FormData
objet afin que je puisse leur permettre de télécharger un formulaire avec l'une de ces images, y a-t-il un moyen pour que je puisse ensuite inverser cette URL d'objet en un Blob
ou File
alors je peux ensuite l'ajouter à un FormData
objet?
javascript
html
fileapi
blobs
BrianFreud
la source
la source
XMLHttpRequest
à l'URL du blob.Réponses:
Solution moderne:
L'URL peut être une URL d'objet ou une URL normale.
la source
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Comme Gengkev y fait allusion dans son commentaire ci-dessus, il semble que la meilleure / seule façon de le faire soit avec un appel async xhr2:
Mise à jour (2018): Pour les situations où ES5 peut être utilisé en toute sécurité, Joe a une réponse plus simple basée sur ES5 ci-dessous.
la source
Peut-être que quelqu'un trouve cela utile lorsque vous travaillez avec React / Node / Axios. Je l'ai utilisé pour ma fonctionnalité de téléchargement d'image Cloudinary avec
react-dropzone
sur l'interface utilisateur.la source
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Pourriez-vous avoir une idée de ce que je pourrais faire de mal / ne pas obtenir?Consultez Obtenir des données BLOB à partir d'une requête XHR qui indique que BlobBuilder ne fonctionne pas dans Chrome, vous devez donc utiliser:
la source
En utilisant fetch par exemple comme ci-dessous:
Vous pouvez coller sur la console Chrome pour tester. le fichier à télécharger avec «sample.xlsx» J'espère qu'il peut vous aider!
la source
Malheureusement, la réponse de @ BrianFreud ne correspond pas à mes besoins, j'avais un besoin un peu différent, et je sais que ce n'est pas la réponse à la question de @ BrianFreud, mais je la laisse ici parce que beaucoup de personnes sont arrivées ici avec mon même besoin. J'avais besoin de quelque chose comme «Comment obtenir un fichier ou un objet blob à partir d'une URL?», Et la bonne réponse actuelle ne correspond pas à mes besoins car elle n'est pas interdomaine.
J'ai un site Web qui consomme des images d'un stockage Amazon S3 / Azure, et j'y stocke des objets nommés avec des identificateurs uniques:
exemple: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Certaines de ces images doivent être téléchargées depuis notre interface système. Pour éviter de faire passer ce trafic via mon serveur HTTP, puisque cet objet ne nécessite aucune sécurité pour accéder (sauf par filtrage de domaine), j'ai décidé de faire une requête directe sur le navigateur de l'utilisateur et d'utiliser un traitement local pour donner au fichier un vrai nom et extension.
Pour ce faire, j'ai utilisé cet excellent article de Henry Algus: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Première étape: ajouter le support binaire à jquery
2. Deuxième étape: faites une demande en utilisant ce type de transport.
Vous pouvez maintenant utiliser le Blob créé comme vous le souhaitez, dans mon cas, je veux l'enregistrer sur le disque.
3. Facultatif: enregistrez le fichier sur l'ordinateur de l'utilisateur à l'aide de FileSaver
J'ai utilisé FileSaver.js pour enregistrer sur le disque le fichier téléchargé, si vous devez accomplir cela, veuillez utiliser cette bibliothèque javascript:
https://github.com/eligrey/FileSaver.js/
J'espère que cela aidera d'autres personnes ayant des besoins plus spécifiques.
la source
Si vous affichez quand même le fichier dans un canevas, vous pouvez également convertir le contenu du canevas en objet blob.
la source