Saya mengizinkan pengguna untuk memuat gambar ke halaman melalui drag & drop dan metode lainnya. Saat gambar dijatuhkan, saya menggunakanURL.createObjectURL
untuk mengonversi ke URL objek untuk menampilkan gambar. Saya tidak mencabut url, karena saya menggunakannya kembali.
Jadi, ketika tiba saatnya untuk membuat FormData
objek sehingga saya dapat mengizinkan mereka mengunggah formulir dengan salah satu gambar di dalamnya, adakah cara agar saya dapat membalikkan URL Objek itu kembali menjadi Blob
atau File
jadi saya dapat menambahkannya ke FormData
obyek?
javascript
html
fileapi
blobs
BrianFreud
sumber
sumber
XMLHttpRequest
ke URL blob.Jawaban:
Solusi modern:
Url dapat berupa url objek atau url normal.
sumber
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Seperti yang disinggung gengkev dalam komentarnya di atas, sepertinya cara terbaik / satu-satunya untuk melakukan ini adalah dengan panggilan xhr2 asinkron:
Pembaruan (2018): Untuk situasi di mana ES5 dapat digunakan dengan aman, Joe memiliki jawaban berbasis ES5 yang lebih sederhana di bawah ini.
sumber
Mungkin seseorang menganggap ini berguna saat bekerja dengan React / Node / Axios. Saya menggunakan ini untuk fitur unggah gambar Cloudinary saya dengan
react-dropzone
di UI.sumber
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Bisakah Anda mendapatkan petunjuk apa yang mungkin saya lakukan salah / tidak saya dapatkan?Lihat Mendapatkan data BLOB dari permintaan XHR yang menunjukkan bahwa BlobBuilder tidak berfungsi di Chrome sehingga Anda perlu menggunakan:
sumber
Menggunakan fetch misalnya seperti di bawah ini:
Anda dapat menempel di konsol Chrome untuk menguji. file dengan unduhan dengan 'sample.xlsx' Semoga dapat membantu!
sumber
Sayangnya jawaban @ BrianFreud tidak sesuai dengan kebutuhan saya, saya memiliki kebutuhan yang sedikit berbeda, dan saya tahu itu bukan jawaban untuk pertanyaan @ BrianFreud, tetapi saya meninggalkannya di sini karena banyak orang datang ke sini dengan kebutuhan yang sama. Saya memerlukan sesuatu seperti 'Bagaimana cara mendapatkan file atau blob dari URL?', Dan jawaban yang benar saat ini tidak sesuai dengan kebutuhan saya karena tidak lintas domain.
Saya memiliki situs web yang menggunakan gambar dari Amazon S3 / Azure Storage, dan di sana saya menyimpan objek yang diberi nama dengan pengidentifikasi unik:
contoh: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Beberapa gambar ini harus diunduh dari antarmuka sistem kami. Untuk menghindari melewatkan lalu lintas ini melalui server HTTP saya, karena objek ini tidak memerlukan keamanan apa pun untuk diakses (kecuali dengan pemfilteran domain), saya memutuskan untuk membuat permintaan langsung di browser pengguna dan menggunakan pemrosesan lokal untuk memberikan nama asli pada file tersebut dan perpanjangan.
Untuk mencapai itu saya telah menggunakan artikel hebat ini dari Henry Algus: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Langkah pertama: Tambahkan dukungan biner ke jquery
2. Langkah kedua: Buat permintaan menggunakan jenis transportasi ini.
Sekarang Anda dapat menggunakan Blob yang dibuat sesuai keinginan, dalam kasus saya, saya ingin menyimpannya ke disk.
3. Opsional: Simpan file di komputer pengguna menggunakan FileSaver
Saya telah menggunakan FileSaver.js untuk menyimpan file yang diunduh ke disk, jika Anda perlu melakukannya, gunakan pustaka javascript ini:
https://github.com/eligrey/FileSaver.js/
Saya berharap ini dapat membantu orang lain dengan kebutuhan yang lebih spesifik.
sumber
Jika Anda tetap menampilkan file di kanvas, Anda juga dapat mengonversi konten kanvas menjadi objek blob.
sumber