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
/**
*
* jquery.binarytransport.js
*
* @description. jQuery ajax transport for making binary data type requests.
* @version 1.0
* @author Henry Algus <henryalgus@gmail.com>
*
*/
// use this transport for "binary" data type
$.ajaxTransport("+binary", function (options, originalOptions, jqXHR) {
// check for conditions and support for blob / arraybuffer response type
if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) {
return {
// create new XMLHttpRequest
send: function (headers, callback) {
// setup all variables
var xhr = new XMLHttpRequest(),
url = options.url,
type = options.type,
async = options.async || true,
// blob or arraybuffer. Default is blob
dataType = options.responseType || "blob",
data = options.data || null,
username = options.username || null,
password = options.password || null;
xhr.addEventListener('load', function () {
var data = {};
data[options.dataType] = xhr.response;
// make callback and send data
callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
});
xhr.open(type, url, async, username, password);
// setup custom headers
for (var i in headers) {
xhr.setRequestHeader(i, headers[i]);
}
xhr.responseType = dataType;
xhr.send(data);
},
abort: function () {
jqXHR.abort();
}
};
}
});
2. Langkah kedua: Buat permintaan menggunakan jenis transportasi ini.
function downloadArt(url)
{
$.ajax(url, {
dataType: "binary",
processData: false
}).done(function (data) {
// just my logic to name/create files
var filename = url.substr(url.lastIndexOf('/') + 1) + '.png';
var blob = new Blob([data], { type: 'image/png' });
saveAs(blob, filename);
});
}
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.
XMLHttpRequest
ke URL blob.