Maalesef @ BrianFreud'un cevabı ihtiyaçlarıma uymuyor, biraz farklı bir ihtiyacım vardı ve bunun @ BrianFreud'un sorusu için cevabı olmadığını biliyorum, ama burada bırakıyorum çünkü birçok insan aynı ihtiyacımla buraya geldi. 'Bir URL'den bir dosya veya blob nasıl alınır?' Gibi bir şeye ihtiyacım vardı ve mevcut doğru cevap, alanlar arası olmadığı için ihtiyaçlarıma uymuyor.
Amazon S3 / Azure Depolamasından görüntüler tüketen bir web sitem var ve burada benzersiz tanımlayıcılarla adlandırılmış nesneleri depoluyorum:
örnek: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Bu resimlerden bazıları sistem arayüzümüzden indirilmelidir. Bu trafiğin HTTP sunucumdan geçmesini önlemek için, bu nesnelere erişim için herhangi bir güvenlik gerektirmediğinden (etki alanı filtreleme hariç), kullanıcının tarayıcısından doğrudan bir istekte bulunmaya ve dosyaya gerçek bir ad vermek için yerel işlemeyi kullanmaya karar verdim ve uzantı.
Bunu başarmak için Henry Algus'un bu harika makalesini kullandım:
http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. İlk adım: jquery'ye ikili destek ekleyin
/**
*
* 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. İkinci adım: Bu taşıma türünü kullanarak bir istekte bulunun.
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);
});
}
Şimdi istediğiniz gibi oluşturulan Blob'u kullanabilirsiniz, benim durumumda onu diske kaydetmek istiyorum.
3. İsteğe bağlı: Dosyayı FileSaver'ı kullanarak kullanıcının bilgisayarına kaydedin
İndirilen dosyayı diske kaydetmek için FileSaver.js'yi kullandım, bunu yapmanız gerekiyorsa, lütfen şu javascript kitaplığını kullanın:
https://github.com/eligrey/FileSaver.js/
Bunun daha özel ihtiyaçları olan başkalarına yardımcı olmasını bekliyorum.
XMLHttpRequest
blob URL'sine bir göndermektir .