Ich erlaube dem Benutzer, Bilder per Drag & Drop und anderen Methoden auf eine Seite zu laden. Wenn ein Bild gelöscht wird, URL.createObjectURL
konvertiere ich es in eine Objekt-URL, um das Bild anzuzeigen. Ich widerrufe die URL nicht, da ich sie wieder verwende.
Wenn es also an der Zeit ist, ein FormData
Objekt zu erstellen, damit sie ein Formular mit einem dieser Bilder hochladen können, kann ich diese Objekt-URL dann auf irgendeine Weise wieder in eine umkehren Blob
oder File
sie dann an eine anhängen FormData
Objekt?
javascript
html
fileapi
blobs
BrianFreud
quelle
quelle
XMLHttpRequest
an die Blob-URL zu senden .Antworten:
Moderne Lösung:
Die URL kann eine Objekt-URL oder eine normale URL sein.
quelle
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Wie Gengkev in seinem obigen Kommentar anspielt, scheint es der beste / einzige Weg zu sein, dies mit einem asynchronen xhr2-Aufruf zu tun:
Update (2018): Für Situationen, in denen ES5 sicher verwendet werden kann, hat Joe unten eine einfachere ES5-basierte Antwort.
quelle
Vielleicht findet jemand dies nützlich, wenn er mit React / Node / Axios arbeitet. Ich habe dies für meine Cloudinary-Funktion zum Hochladen von Bildern
react-dropzone
auf der Benutzeroberfläche verwendet.quelle
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Könnten Sie einen Hinweis haben, was ich möglicherweise falsch mache / nicht bekomme?Siehe Abrufen von BLOB-Daten aus einer XHR-Anforderung, in dem darauf hingewiesen wird, dass BlobBuilder in Chrome nicht funktioniert. Sie müssen daher Folgendes verwenden:
quelle
Verwenden Sie Fetch zum Beispiel wie folgt:
Sie können zum Testen in die Chrome-Konsole einfügen. die Datei mit Download mit 'sample.xlsx' Hoffe es kann helfen!
quelle
Leider passt die Antwort von @ BrianFreud nicht zu meinen Bedürfnissen, ich hatte ein etwas anderes Bedürfnis und ich weiß, dass dies nicht die Antwort auf die Frage von @ BrianFreud ist, aber ich lasse sie hier, weil viele Personen mit demselben Bedürfnis hierher gekommen sind. Ich brauchte etwas wie "Wie bekomme ich eine Datei oder einen Blob von einer URL?", Und die aktuell richtige Antwort entspricht nicht meinen Anforderungen, da sie nicht domänenübergreifend ist.
Ich habe eine Website, die Bilder aus einem Amazon S3 / Azure-Speicher verwendet, und dort speichere ich Objekte mit eindeutigen Kennungen:
Beispiel: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Einige dieser Bilder sollten von unserer Systemschnittstelle heruntergeladen werden. Um zu vermeiden, dass dieser Datenverkehr über meinen HTTP-Server geleitet wird, habe ich beschlossen, eine direkte Anfrage im Browser des Benutzers zu stellen und der Datei die lokale Verarbeitung zu geben, um der Datei einen echten Namen zu geben, da für diese Objekte keine Sicherheit erforderlich ist (außer durch Domänenfilterung) Erweiterung.
Um dies zu erreichen, habe ich diesen großartigen Artikel von Henry Algus verwendet: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Erster Schritt: Fügen Sie jquery binäre Unterstützung hinzu
2. Zweiter Schritt: Stellen Sie eine Anfrage mit diesem Transporttyp.
Jetzt können Sie den erstellten Blob so verwenden, wie Sie möchten. In meinem Fall möchte ich ihn auf der Festplatte speichern.
3. Optional: Speichern Sie die Datei mit FileSaver auf dem Computer des Benutzers
Ich habe FileSaver.js verwendet, um die heruntergeladene Datei auf der Festplatte zu speichern. Wenn Sie dies benötigen, verwenden Sie bitte diese Javascript-Bibliothek:
https://github.com/eligrey/FileSaver.js/
Ich erwarte, dass dies anderen mit spezifischeren Bedürfnissen hilft.
quelle
Wenn Sie die Datei trotzdem in einer Zeichenfläche anzeigen, können Sie den Zeichenflächeninhalt auch in ein Blob-Objekt konvertieren.
quelle