दुर्भाग्य से @ BrianFreud का उत्तर मेरी आवश्यकताओं के अनुरूप नहीं है, मुझे थोड़ी अलग आवश्यकता थी, और मुझे पता है कि @ BrianFreud के प्रश्न का उत्तर नहीं है, लेकिन मैं इसे यहाँ छोड़ रहा हूँ क्योंकि बहुत सारे लोग मेरी इसी आवश्यकता के साथ यहाँ आए थे। मुझे कुछ इस तरह की आवश्यकता थी कि 'फाइल कैसे प्राप्त करें या URL से ब्लॉब करें?', और वर्तमान सही उत्तर मेरी ज़रूरतों को पूरा नहीं करता है क्योंकि इसका क्रॉस-डोमेन नहीं है।
मेरे पास एक वेबसाइट है जो अमेज़ॅन एस 3 / एज़्योर स्टोरेज से छवियों का उपभोग करती है, और वहां मैं अद्वितीय पहचानकर्ताओं के साथ नामित वस्तुओं को संग्रहीत करता हूं:
नमूना: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
इस चित्र में से कुछ को हमारे सिस्टम इंटरफ़ेस से डाउनलोड किया जाना चाहिए। मेरे HTTP सर्वर के माध्यम से इस ट्रैफ़िक को पारित करने से बचने के लिए, क्योंकि इस ऑब्जेक्ट को एक्सेस करने के लिए किसी भी सुरक्षा की आवश्यकता नहीं है (डोमेन फ़िल्टरिंग को छोड़कर), मैंने उपयोगकर्ता के ब्राउज़र पर एक सीधा अनुरोध करने और फ़ाइल को वास्तविक नाम देने के लिए स्थानीय प्रसंस्करण का उपयोग करने का निर्णय लिया विस्तार।
यह पूरा करने के लिए कि मैंने हेनरी एल्गस के इस बेहतरीन लेख का उपयोग किया है:
http://www.henryalgus.com/reading-binary-files-use-jquery-ajax/
1. पहला कदम: 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. दूसरा चरण: इस परिवहन प्रकार का उपयोग करके अनुरोध करें।
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);
});
}
अब आप जिस ब्लूब को बनाया है उसका उपयोग कर सकते हैं, मेरे मामले में मैं इसे डिस्क पर सहेजना चाहता हूं।
3. वैकल्पिक: FileSaver का उपयोग करके उपयोगकर्ता के कंप्यूटर पर फ़ाइल सहेजें
मैंने डाउनलोड की गई फ़ाइल को डिस्क में सहेजने के लिए FileSaver.js का उपयोग किया है, अगर आपको इसे पूरा करने की आवश्यकता है, तो कृपया इस जावास्क्रिप्ट लाइब्रेरी का उपयोग करें:
https://github.com/eligrey/FileSaver.js/
मैं यह अपेक्षा करता हूं कि और अधिक विशिष्ट आवश्यकताओं के साथ दूसरों की मदद करें।
XMLHttpRequest
को भेजे गए URL पर भेज दें ।