我正在尝试将一些文件从控制台应用程序上传到ASP.NET 5 WEB API服务。
客户端(控制台应用):
private static HttpResponseMessage UploadFiles(string[] files, Uri uploadEndpoint)
{
var message = new HttpRequestMessage();
var content = new MultipartFormDataContent();
foreach (var file in files)
{
var fs = new FileStream(file, FileMode.Open);
var index = file.LastIndexOf(@"\");
var fn = file.Substring(index + 1);
fs.Position = 0;
content.Add(new StreamContent(fs), "file", fn);
}
message.Method = HttpMethod.Post;
message.Content = content;
message.RequestUri = uploadEndpoint;
var client = new HttpClient();
return client.SendAsync(message).Result;
}
服务器(Asp.Net 5)Web API
[HttpPost("upload")]
public IActionResult UploadFiles(ICollection<IFormFile> files)
{
var streams = files.Select(f => f.OpenReadStream()).ToArray();
var names = files.Select(f => ContentDispositionHeaderValue.Parse(f.ContentDisposition).FileName).ToArray();
ProcessFiles(streams, names);
return new HttpOkResult();
}
不幸的是,IFormFile的集合总是空的。 任何人都可以告诉我为什么?
由于
马努
答案 0 :(得分:7)
您的上传控制器希望发布的数据的名称标识符为files
,而不是file
。
这一行:content.Add(new StreamContent(fs), "file", fn);
应该是:content.Add(new StreamContent(fs), "files", fn);
所以你的代码基本上有效,这只是一个简单的错误。
答案 1 :(得分:1)
您需要将表单的enctype设置为multipart / form-data。这样的事情。
<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data">
<input type="file" name="files" multiple/>
<input type="submit" value="Upload" />
</form>
答案 2 :(得分:0)
我遇到了这个相同的问题,结果发现我只是遗漏了 - name =&#34; files&#34;来自HTML的<input type="file" name="files" multiple />
。