Загрузка больших файлов ASP.NET Core StreamContent и MultipartFormDataContent ⇐ C#
-
Гость
Загрузка больших файлов ASP.NET Core StreamContent и MultipartFormDataContent
Я знаю, что существует множество ресурсов и ответов о загрузке больших файлов в веб-API ASP.NET Core, но мой вопрос очень конкретен, и я не смог найти ответа.
Я пытаюсь реализовать возможность загрузки больших файлов в проекте API ASP.NET Core 7. Разница в том, что я не использую веб-приложение в качестве пользовательского интерфейса, а приложение Winforms пытается загрузить файл.
Во всех ресурсах в Интернете упоминается использование MultipartReader, но я пытаюсь найти причину, требуется ли это, если вызов выполняется из настольного приложения Winforms.
Когда я делаю такой запрос с помощью StreamContent;
с использованием (var fileStream = File.OpenRead(sampleFilePath)) используя (varstreamContent = новый StreamContent(fileStream)) { var requestUrl = @"Документ/ЗагрузитьДокумент"; ответ вар = _httpClient.PostAsync(requestUrl,streamContent).Result; } Могу загрузить файл размером 1,5 Гб.
Я также могу использовать:
с использованием (var fileStream = File.OpenRead(sampleFilePath)) используя (varstreamContent = новый StreamContent(fileStream)) используя (var formData = новый MultipartFormDataContent()) { formData.Add(streamContent, "Файлы", "SampleDoc.pdf"); var requestUrl = @"Document/UploadStream"; ответ вар = _httpClient.PostAsync(requestUrl, formData).Result; } РЕДАКТИРОВАТЬ:
Действия контроллера: Для первого с streamContent
[HttpPost] общедоступный IActionResult UploadDocument() { вар filePath = PathHelper.GetPath(); используя (var fileStream = новый FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { Request.Body.CopyToAsync(fileStream).Wait(); } вернуть ОК(); } Для второго с MultipartReader
[HttpPost] [Мультипартформдата] [Дисаблеформвалуемоделбиндинг] общедоступная асинхронная задача UploadStream() { вар fileUploadSummary = ждут _fileService.UploadFileAsync(HttpContext.Request.Body, Request.ContentType); вернуть CreatedAtAction(nameof(UploadStream), fileUploadSummary); } ПРИМЕЧАНИЕ: реализации _fileService и UploadFileAsync взяты из этой ссылки: https://code-maze.com/aspnetcore-upload-large-files/ Мой вопрос: если оба могут загрузить файл, следует ли мне использовать второй вариант с MultipartReader, в чем его преимущество?
Мое исследование показало мне, что метод Add MultipartFormDataContent позволяет загружать несколько файлов. Является ли это одним из преимуществ? Во-вторых, на контроллере, который загружает документ, происходит проверка типа контента "multipart/form-data", что заставляет меня думать, что этот параметр необходим, если файл отправляется в форме с файл типа ввода, например:
Разница в том, что MultiPartReader требуется, когда файл отправляется с файлом типа ввода формы?
Я знаю, что существует множество ресурсов и ответов о загрузке больших файлов в веб-API ASP.NET Core, но мой вопрос очень конкретен, и я не смог найти ответа.
Я пытаюсь реализовать возможность загрузки больших файлов в проекте API ASP.NET Core 7. Разница в том, что я не использую веб-приложение в качестве пользовательского интерфейса, а приложение Winforms пытается загрузить файл.
Во всех ресурсах в Интернете упоминается использование MultipartReader, но я пытаюсь найти причину, требуется ли это, если вызов выполняется из настольного приложения Winforms.
Когда я делаю такой запрос с помощью StreamContent;
с использованием (var fileStream = File.OpenRead(sampleFilePath)) используя (varstreamContent = новый StreamContent(fileStream)) { var requestUrl = @"Документ/ЗагрузитьДокумент"; ответ вар = _httpClient.PostAsync(requestUrl,streamContent).Result; } Могу загрузить файл размером 1,5 Гб.
Я также могу использовать:
с использованием (var fileStream = File.OpenRead(sampleFilePath)) используя (varstreamContent = новый StreamContent(fileStream)) используя (var formData = новый MultipartFormDataContent()) { formData.Add(streamContent, "Файлы", "SampleDoc.pdf"); var requestUrl = @"Document/UploadStream"; ответ вар = _httpClient.PostAsync(requestUrl, formData).Result; } РЕДАКТИРОВАТЬ:
Действия контроллера: Для первого с streamContent
[HttpPost] общедоступный IActionResult UploadDocument() { вар filePath = PathHelper.GetPath(); используя (var fileStream = новый FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { Request.Body.CopyToAsync(fileStream).Wait(); } вернуть ОК(); } Для второго с MultipartReader
[HttpPost] [Мультипартформдата] [Дисаблеформвалуемоделбиндинг] общедоступная асинхронная задача UploadStream() { вар fileUploadSummary = ждут _fileService.UploadFileAsync(HttpContext.Request.Body, Request.ContentType); вернуть CreatedAtAction(nameof(UploadStream), fileUploadSummary); } ПРИМЕЧАНИЕ: реализации _fileService и UploadFileAsync взяты из этой ссылки: https://code-maze.com/aspnetcore-upload-large-files/ Мой вопрос: если оба могут загрузить файл, следует ли мне использовать второй вариант с MultipartReader, в чем его преимущество?
Мое исследование показало мне, что метод Add MultipartFormDataContent позволяет загружать несколько файлов. Является ли это одним из преимуществ? Во-вторых, на контроллере, который загружает документ, происходит проверка типа контента "multipart/form-data", что заставляет меня думать, что этот параметр необходим, если файл отправляется в форме с файл типа ввода, например:
Разница в том, что MultiPartReader требуется, когда файл отправляется с файлом типа ввода формы?
Мобильная версия