Загрузка файла Blazor IFormFile - PullRequest
0 голосов
/ 26 мая 2020

Я использую Blazor Wasm и хочу загрузить файл pdf или jpeg на сервер.

Пожалуйста, не делитесь кодом на стороне сервера, все примеры объясняют сторону сервера. Но мне нужен пример клиента.

Потому что я хочу загрузить медиафайл с датой. Я буду использовать multipart / form-data, но я не могу назначить свой файл IFormFile.

Как я могу назначить файл / файловый поток для IFormFile?

Спасибо

1 Ответ

0 голосов
/ 26 мая 2020

В настоящее время я не думаю, что есть какие-либо родные компоненты Blazor wasm для загрузки файлов. Существует множество компонентов загрузки файлов, использующих JSInterop. Среди тех, что я пробовал, это Radzen fileupload , Steve Sandersons (один из разработчиков Blazor) fileupload и MatBlazor fileupload .

Однако в настоящее время в Mono есть некоторые проблемы с памятью, а именно с базовой платформой разработки, на которой работает Blazor. Это означает, что Blazor может управлять файлами размером до ~ 5-6 МБ. Поэтому я советую вам использовать компоненты Blazor, которые строго используют javascript для отправки файла на сервер, например, Radzen fileupload.

Вот пример загрузки файла на стороне клиента с использованием MatBlazor (поскольку это тот, что у меня в руках банкомат):

     <div class="p-2">
                <MatFileUpload OnChange="AddFile" class="form-container" Label="Upload File"></MatFileUpload>
                </div>

@code
 {

    private async Task AddFile(IMatFileUploadEntry[] files)
    {
        var file = files.FirstOrDefault();
                if (file != null)
                {
                    var ms = new MemoryStream();
                    await file.WriteToStreamAsync(ms);
                    var content = new MultipartFormDataContent 
                     {
                        { new ByteArrayContent(ms.GetBuffer()), 
                          "\"uploadFile\"", 
                          file.Name 
                        }
                    };
                    await client.PostAsync("uploadFile", content);
                }
    }
}
...