ব্যবহার FileReader
's readAsDataURL()
আমি ডেটা URL- এ অবাধ তথ্য রুপান্তর করতে পারেন। Blob
বিল্টিন ব্রাউজার এপিআইএস ব্যবহার করে কোনও ডেটা ইউআরএলকে আবার কোনও উদাহরণে রূপান্তর করার উপায় আছে কি ?
ব্যবহার FileReader
's readAsDataURL()
আমি ডেটা URL- এ অবাধ তথ্য রুপান্তর করতে পারেন। Blob
বিল্টিন ব্রাউজার এপিআইএস ব্যবহার করে কোনও ডেটা ইউআরএলকে আবার কোনও উদাহরণে রূপান্তর করার উপায় আছে কি ?
উত্তর:
ব্যবহারকারী ম্যাট এক বছর আগে নিম্নলিখিত কোডটি প্রস্তাব করেছেন ( কীভাবে জাভাস্ক্রিপ্টে ডাটাআরএল ফাইলের জন্য ডেটাআরএল রূপান্তর করবেন? ) যা আপনাকে সহায়তা করতে পারে
সম্পাদনা: কিছু মন্তব্যকারী হিসাবে রিপোর্ট করা হয়েছে যে ব্লববিল্ডার কিছু সময় আগে অবহেলিত হয়েছে। এটি আপডেট হওয়া কোড:
function dataURItoBlob(dataURI) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
var byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
// create a view into the buffer
var ia = new Uint8Array(ab);
// set the bytes of the buffer to the correct values
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// write the ArrayBuffer to a blob, and you're done
var blob = new Blob([ab], {type: mimeString});
return blob;
}
@ অ্যাড্রিয়া পদ্ধতির মতো তবে এ্যাপি এপি এবং কেবল ছোট [ ক্যানিয়াস? ]
মাইমটাইপ সম্পর্কে ভাবতে হবে না যেহেতু ব্লব রেসপন্স টাইপটি কেবল বক্সের বাইরে কাজ করে
সতর্কতা: সামগ্রী সুরক্ষা নীতি (সিএসপি) লঙ্ঘন করতে পারে
যদি স্টাফ ব্যবহার করেন তবে করতে পারে
var url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
fetch(url)
.then(res => res.blob())
.then(blob => console.log(blob))
লিব ব্যবহার না করে আপনি এটির চেয়ে আরও ছোট কিছু করতে পারবেন বলে মনে করবেন না
const blob = await (await fetch(url)).blob();
fetch
হ'ল এটি একটি এসিঙ্ক এপিআই থাকা জোর করে।
dataURItoBlob : function(dataURI, dataTYPE) {
var binary = atob(dataURI.split(',')[1]), array = [];
for(var i = 0; i < binary.length; i++) array.push(binary.charCodeAt(i));
return new Blob([new Uint8Array(array)], {type: dataTYPE});
}
ইনপুট ডেটা ইউআরআই হ'ল ডেটা ইউআরএল এবং ডেটা টিওয়াইপি ফাইলের ধরণ এবং তারপরে আউটপুট ব্লব অবজেক্ট
dataTYPE
এমবেড করা হয় dataURI
এবং অত: পর প্রথম উত্তর হিসেবে পার্স করা উচিত।
এক্সএইচআর ভিত্তিক পদ্ধতি।
function dataURLtoBlob( dataUrl, callback )
{
var req = new XMLHttpRequest;
req.open( 'GET', dataUrl );
req.responseType = 'arraybuffer'; // Can't use blob directly because of https://crbug.com/412752
req.onload = function fileLoaded(e)
{
// If you require the blob to have correct mime type
var mime = this.getResponseHeader('content-type');
callback( new Blob([this.response], {type:mime}) );
};
req.send();
}
dataURLtoBlob( 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', function( blob )
{
console.log( blob );
});
ইন আধুনিক ব্রাউজারে এক একটি মন্তব্যে এক মাছ ধরার নৌকা খ্রিস্টান d'Heureuse দ্বারা প্রস্তাবিত ব্যবহার করতে পারেন:
const blob = await (await fetch(dataURI)).blob();
চেষ্টা করুন:
function dataURItoBlob(dataURI) {
if(typeof dataURI !== 'string'){
throw new Error('Invalid argument: dataURI must be a string');
}
dataURI = dataURI.split(',');
var type = dataURI[0].split(':')[1].split(';')[0],
byteString = atob(dataURI[1]),
byteStringLength = byteString.length,
arrayBuffer = new ArrayBuffer(byteStringLength),
intArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteStringLength; i++) {
intArray[i] = byteString.charCodeAt(i);
}
return new Blob([intArray], {
type: type
});
}
function dataURLtoBlob( dataUrl, callback )
{
var req = new XMLHttpRequest;
req.open( 'GET', dataUrl );
req.responseType = 'blob';
req.onload = function fileLoaded(e)
{
callback(this.response);
};
req.send();
}
var dataURI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='
dataURLtoBlob(dataURI , function( blob )
{
console.log( blob );
});
আমার কোডটি রূপান্তর করতে ডেটা ইউআরআই ব্যবহার করুন b এটি অন্যের চেয়ে সহজ এবং পরিষ্কার।
function dataURItoBlob(dataURI) {
var arr = dataURI.split(','), mime = arr[0].match(/:(.*?);/)[1];
return new Blob([atob(arr[1])], {type:mime});
}
যেহেতু এই উত্তরগুলির কোনওটিই বেস64 এবং অ বেস-ভিত্তিক ডেটা URL গুলি সমর্থন করে না, ভুমিটম মোছা উত্তরের উপর ভিত্তি করে এমন একটি এখানে দেওয়া হয়েছে:
// from /programming/37135417/download-canvas-as-png-in-fabric-js-giving-network-error/
var dataURLtoBlob = exports.dataURLtoBlob = function(dataurl) {
var parts = dataurl.split(','), mime = parts[0].match(/:(.*?);/)[1]
if(parts[0].indexOf('base64') !== -1) {
var bstr = atob(parts[1]), n = bstr.length, u8arr = new Uint8Array(n)
while(n--){
u8arr[n] = bstr.charCodeAt(n)
}
return new Blob([u8arr], {type:mime})
} else {
var raw = decodeURIComponent(parts[1])
return new Blob([raw], {type: mime})
}
}
দ্রষ্টব্য: আমি নিশ্চিত নই যে সেখানে অন্য ডেটাআরএল মাইম প্রকার রয়েছে যা আলাদাভাবে পরিচালনা করতে হতে পারে। তবে দয়া করে আমাকে জানাবেন! এটি সম্ভব যে ডেটাআরএলগুলি সহজেই তাদের যে কোনও ফর্ম্যাট থাকতে পারে এবং সেক্ষেত্রে আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে সঠিক কোডটি খুঁজে বের করা আপনার পক্ষে হবে।
ব্যবহার
FileReader.readAsArrayBuffer(Blob|File)
বরং
FileReader.readAsDataURL(Blob|File)
ArrayBuffer
পথ ব্যবহার করা কার্যকর হবে না।