【问题标题】:Blazor Server-Side JS InvokingBlazor 服务器端 JS 调用
【发布时间】: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


【解决方案1】:

所以,在 AspNetDocs github 上阅读,有一个启动选项可以更改最大消息大小,但我认为它仅适用于从 JS 到 .Net 的调用 (https://github.com/dotnet/AspNetCore.Docs/issues/21208)。不过值得一试。

services.AddServerSideBlazor()
    .AddHubOptions(options => options.MaximumReceiveMessageSize = 32000);

不过,就我个人而言,我会按照 Magoo 先生在评论中所说的去做,要么使用 API,要么将数据分块并在另一端重新组装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2021-05-28
    • 2020-05-15
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多