Загрузка файла через multipart-form-data с использованием WebClient в C # - PullRequest
0 голосов
/ 05 апреля 2019

Может кто-нибудь сказать мне, как загрузить файл в multipart-form-data, чтобы я мог добавить пост-параметры и файл в качестве содержимого.

1 Ответ

0 голосов
/ 05 апреля 2019

Если вам нужны files и объекты в полезной нагрузке, вы можете использовать форму multipart, например:

Форма

<form id="createForm" method="post" enctype="multipart/form-data" action="http://localhost:5000/api/send">
<input type="text" name="Field1"  id="field1" />
<input type="text" name="Field2"  id="field2" />
<input type="file" id="bulk" name="Bulk" required />
</form>

ПОКО

class MyClass
{
  public string Field1{get;set;}
  public string Field2{get;set;}
}

Контроллер
В контроллере вы можете получить доступ к файлам, используя Request.Form.Files, что дает вам коллекцию со всеми вашими загруженными файлами. Затем вы можете читать ваши файлы, используя StreamReader, как я делаю ниже:

[HttpPost]
[Route("api/send")]
[DisableRequestSizeLimit] 
public async Task<long> CreateAsync(MyClass obj) {
{
  var file=this.Request.Form.Files[0];  //there's only one in our form
  using(StreamReader reader=new StreamReader(file))
  {
    var data=await reader.ReadToEndAsync();
    Console.WriteLine("File Content:"+data);
    Console.WriteLine("{ Field1 :"+obj.Field1.ToString()+",Field2:"+obj.Field2.ToString()+"}");
  }

}

Внимание
Будьте внимательны при работе с multipart, поскольку вам также необходимо указать размер сегмента maximum.
Это делается в Startup:

public void ConfigureServices(IServiceCollection services) {
    services.Configure<FormOptions>(options => {
                    options.ValueCountLimit = 200;
                    options.ValueLengthLimit = int.MaxValue;
                    options.MultipartBodyLengthLimit = long.MaxValue;
                });
 }

или как я сделал это непосредственно в методе Controller -s, украсив его атрибутом [DisableRequestSizeLimit].

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