Загрузка файла размером более 20 МБ с помощью вызова JSInterop в javascript вызывает ошибку отключения браузера - PullRequest
1 голос
/ 18 октября 2019

В нашем приложении для сервера на стороне сервера у нас есть возможность загружать файлы, используя javascript. Проблема в том, что когда я пытаюсь загрузить файл размером более 20 МБ, соединение закрывается и процесс загрузки прерывается.

И в браузере отображается сообщение:

Попытка переподключенияна сервер ...

И консоль браузера отображает ошибку:

blazor.server.js: 1 [2019-10-17T22: 47: 31.704Z] Ошибка: соединение отключено сerror 'Ошибка: WebSocket закрыт с кодом состояния: 1006 ().'.

Есть ли способ разрешить загрузку больших файлов?

Есть ли время ожидания, которое мне нужно увеличитьдля того, чтобы скачивать файлы размером более 20 МБ?

Я пробовал это без каких-либо улучшений:

services.AddServerSideBlazor (options => options.JSInteropDefaultCallTimeout = TimeSpan.FromSeconds (120));

JavaScript является:

function saveAsFile(filename, base64) {
    var array = Base64Binary.decode(base64);
    let blob = new Blob([array], {
        type: 'application/octet-stream'
    });

    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blob, name);
    } else {
    var link = document.createElement('a');
    link.download = filename;
    let url = URL.createObjectURL(blob);
    link.download = filename;
    link.href = url;
    document.body.appendChild(link); // Needed for Firefox
    link.click();
    document.body.removeChild(link);
}

} ​​

И javascript называется:

public static ValueTask<object> SaveAs(IJSRuntime jsRuntime, string filename, byte[] data) => jsRuntime.InvokeAsync<object>("saveAsFile", filename, Convert.ToBase64String(data));

Я надеюсь, что наши пользователи смогут загружать файлы размером до 150 МБ без отключения браузера.

1 Ответ

0 голосов
/ 18 октября 2019

Похоже, размер буфера сообщений превышен, вы можете установить размер буфера, используя следующую конфигурацию.

endpoints.MapHub<ComponentHub>(
            ComponentHub.DefaultPath,
            o =>
            {
                o.ApplicationMaxBufferSize = 102400000; // larger size
                o.TransportMaxBufferSize = 102400000; // larger size
            })

Ссылка: https://github.com/aspnet/AspNetCore/issues/9570#issuecomment-488649334

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...