यह बिल्कुल ओपी का परिदृश्य नहीं है, बल्कि टिप्पणी करने वालों में से कुछ का जवाब है। यह कॉर्डोवा और कोणीय 1 पर आधारित एक समाधान है, जिसे jQuery जैसे अन्य ढांचे के अनुकूल होना चाहिए। यह आपको Base64 डेटा से एक बूँद देता है जिसे आप कहीं भी स्टोर कर सकते हैं और इसे क्लाइंट साइड जावास्क्रिप्ट / html से संदर्भित कर सकते हैं।
यह मूल प्रश्न का उत्तर भी देता है कि बेस 64 डेटा से एक छवि (फ़ाइल) कैसे प्राप्त करें:
महत्वपूर्ण हिस्सा बेस 64 है - बाइनरी रूपांतरण:
function base64toBlob(base64Data, contentType) {
contentType = contentType || '';
var sliceSize = 1024;
var byteCharacters = atob(base64Data);
var bytesLength = byteCharacters.length;
var slicesCount = Math.ceil(bytesLength / sliceSize);
var byteArrays = new Array(slicesCount);
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
var begin = sliceIndex * sliceSize;
var end = Math.min(begin + sliceSize, bytesLength);
var bytes = new Array(end - begin);
for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
bytes[i] = byteCharacters[offset].charCodeAt(0);
}
byteArrays[sliceIndex] = new Uint8Array(bytes);
}
return new Blob(byteArrays, { type: contentType });
}
मेमोरी त्रुटियों से बचने के लिए स्लाइसिंग आवश्यक है।
Jpg और पीडीएफ फाइलों के साथ काम करता है (कम से कम जो मैंने परीक्षण किया है)। अन्य mimetypes / सामग्री के साथ भी काम करना चाहिए। आपके द्वारा लक्षित ब्राउज़र और उनके संस्करणों की जाँच करें, उन्हें Uint8Array, Blob और atob का समर्थन करने की आवश्यकता है।
यहां कोडोवा / Android के साथ डिवाइस के स्थानीय भंडारण में फ़ाइल लिखने के लिए कोड है:
...
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dirEntry) {
var filename = attachment.id + "-" + (attachment.fileName ? attachment.fileName : 'image') + "." + (attachment.fileType ? attachment.fileType : "jpg");
dirEntry.getFile(filename, { create: true, exclusive: false }, function(fileEntry) {
var binary = base64toBlob(attachment.document, attachment.mimetype);
writeFile(fileEntry, binary).then(function() {
attachment.document = fileEntry.nativeURL;
}, function(error) {
WL.Logger.error("Error writing local file: " + error);
reject(error.code);
});
}, function(errorCreateFile) {
WL.Logger.error("Error creating local file: " + JSON.stringify(errorCreateFile));
reject(errorCreateFile.code);
});
}, function(errorCreateFS) {
WL.Logger.error("Error getting filesystem: " + errorCreateFS);
reject(errorCreateFS.code);
});
...
फ़ाइल को स्वयं लिखना:
function writeFile(fileEntry, dataObj) {
return $q(function(resolve, reject) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function() {
WL.Logger.debug(LOG_PREFIX + "Successful file write...");
resolve();
};
fileWriter.onerror = function(e) {
WL.Logger.error(LOG_PREFIX + "Failed file write: " + e.toString());
reject(e);
};
if (!dataObj) {
dataObj = new Blob(['missing data'], { type: 'text/plain' });
}
fileWriter.write(dataObj);
});
})
}
मैं नवीनतम कॉर्डोवा (6.5.0) और प्लगइन्स संस्करणों का उपयोग कर रहा हूं:
मुझे उम्मीद है कि यह यहां सभी को सही दिशा में ले जाएगा।