首页 > 解决方案 > Blazor 服务器端 JS 调用

问题描述

嗨,我正在尝试将 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 值太大,不受支持。

我已经尝试修复它,但它仍然失败,这让我有点沮丧

那么我的错误有解决方案吗?或者我该怎么办?

我感谢您的任何建议或反馈

标签: javascriptc#asp.netblazorblazor-server-side

解决方案


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

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

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


推荐阅读