【问题标题】:File upload via multipart-form-data using WebClient in C#在 C# 中使用 WebClient 通过 multipart-form-data 上传文件
【发布时间】:2019-08-27 03:53:56
【问题描述】:

谁能告诉我如何在 multipart-form-data 中上传文件,以便我可以添加 post-params 和文件作为内容。

【问题讨论】:

    标签: c# file-upload webclient multipartform-data


    【解决方案1】:

    如果您需要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>
    

    POCO

    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] 属性装饰它。

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 2018-03-28
      • 2015-10-23
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多