在 C# 中使用 WebClient 通过 multipart-form-data 上传文件
File upload via multipart-form-data using WebClient in C#
谁能告诉我如何在 multipart-form-data 中上传文件,以便我可以添加 post-params 和文件作为内容。
如果您同时需要 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
访问文件,这会为您提供一个包含所有已上传 files.Then 的集合,您可以使用 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]
属性装饰它。
谁能告诉我如何在 multipart-form-data 中上传文件,以便我可以添加 post-params 和文件作为内容。
如果您同时需要 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
访问文件,这会为您提供一个包含所有已上传 files.Then 的集合,您可以使用 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]
属性装饰它。