এটি হ'ল ওপি-র দৃশ্য নয়, তবে কিছু মন্তব্যকারীদের জবাব। এটি কর্ডোভা এবং অ্যাঙ্গুলার 1 এর উপর ভিত্তি করে একটি সমাধান যা jQuery এর মতো অন্যান্য কাঠামোর সাথে খাপ খাইয়ে নেওয়া উচিত। এটি আপনাকে বেস 64 ডেটা থেকে একটি ব্লব দেয় যা আপনি কোথাও সঞ্চয় করতে পারেন এবং ক্লায়েন্টের পাশের জাভাস্ক্রিপ্ট / এইচটিএমএল থেকে উল্লেখ করতে পারেন।
এটি বেস 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 এবং pdf ফাইলের সাথে কাজ করে (কমপক্ষে এটি আমি পরীক্ষা করে দেখেছি)। অন্যান্য মাইম টাইপস / কন্টেন্ট টাইপের সাথে কাজ করা উচিত। আপনি যে ব্রাউজারগুলি লক্ষ্য করেছেন এবং তাদের সংস্করণগুলি দেখুন সেগুলি ইউিনট 8 অ্যারে, ব্লব এবং অ্যাওব সমর্থন করতে হবে।
কর্ডোভা / অ্যান্ড্রয়েডের সাথে ডিভাইসের লোকাল স্টোরেজে ফাইলটি লেখার কোড এখানে রয়েছে:
...
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) এবং প্লাগইন সংস্করণগুলি ব্যবহার করছি:
আমি আশা করি এটি এখানে সবাইকে সঠিক দিকে এগিয়ে নিয়েছে।