【发布时间】:2021-10-06 03:49:31
【问题描述】:
您好,我正在尝试将 c# 中的视频字节移动到 javascript,以将字节转换为 Blazor 服务器端上的 URL.createObjectURL
我使用 Js Invoke 移动了字节
.cs
if (!string.IsNullOrEmpty(item.PathFile))
{
//Byte Video
byte[] result = GetFile(item.PathFile);
if (result != null)
{
var url = await Js.InvokeAsync<string>("videoUrl", result);
data.ImageString = url;
}
}
.js
function videoUrl(value) {
var byteCharacters = atob(value);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
//Byte Array -> Blob
var file = new Blob([byteArray], { type: 'data:video/mp4;base64' });
//Blob -> Object URL
var fileURL = URL.createObjectURL(file);
return fileURL;
}
我的问题是,我为 3 Mb 大小的视频尝试了此脚本,它运行良好,但是当我尝试 133Mb 视频时出现错误:
错误:System.ArgumentException:长度为 139569235 的 JSON 值太大,不受支持。
我尝试修复它,但仍然失败,这让我有点沮丧
那么我的错误有解决方案吗?或者我该怎么办?
感谢您的任何建议或反馈
【问题讨论】:
-
我会亲自生成一个一次性令牌,将其发送到 JS 函数,然后在 JS 中使用 fetch 从服务器 api 请求文件 - 而不是通过 Blazor SignalR 连接完成。如果您必须按照自己的方式进行,请分块发送。
标签: javascript c# asp.net blazor blazor-server-side