به روز رسانی به Blazor 6x
اگر مثال فوق را بر اساس Blazor 6x اجرا کنید، با خطای زیر مواجه خواهید شد:
Microsoft.JSInterop.JSException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. at Object.createBlobUrl
علت اینجا است که در جهت بالا رفتن کارآیی برنامههای Blazor، دیگر یک byte array به صورت base64 به سمت کدهای جاوااسکریپتی ارسال نمیشود و مستقیما به صورت Uint8Array
ارسال خواهد شد. اطلاعات بیشتر
بنابراین در کدهای فوق، قطعه کد قبلی زیر:
window.JsBinaryFilesUtils = {
createBlobUrl: function (byteArray, contentType) {
// The byte array in .NET is encoded to base64 string when it passes to JavaScript.
const numArray = atob(byteArray)
.split("")
.map((c) => c.charCodeAt(0));
const uint8Array = new Uint8Array(numArray);
const blob = new Blob([uint8Array], { type: contentType });
return URL.createObjectURL(blob);
},
به صورت زیر ساده میشود و دیگر نیازی به encoding و decoding ندارد:
window.JsBinaryFilesUtils = {
createBlobUrl: function (byteArray, contentType) {
const blob = new Blob([byteArray], { type: contentType });
return URL.createObjectURL(blob);
},