我正在尝试在我的MVC ApiController中创建一个POST方法来接收和通过WebClient.UploadFile提交的名称文件。我已经搜索了一段时间,并没有使用ApiController找到任何完整的样本。我发现许多使用MVC控制器使用的相同Request对象。这些都使用Request.Files集合来获取文件流。但是,在ApiController公开的Request对象上找不到相同的属性。
以下是我的客户端控制台应用程序和服务器站点MVC ApiController的代码片段。
客户端代码:
private void executePost(string url, string filename, params KeyValuePair<string, string>[] parms)
{
WebClient client = new WebClient();
parms.ToList().ForEach(k => client.QueryString.Add(k.Key, k.Value));
client.UploadFile(url, "POST", filename);
}
伪服务器端ApiController方法:
public async Task<HttpResponseMessage> UploadFile(string p1, string p2, string p3)
{
if (Request.Content.IsMimeMultipartContent())
{
var provider = new MultipartFileStreamProvider("/myroot/files");
await Request.Content.ReadAsMultipartAsync(provider)
.ContinueWith(r =>
{
if (r.IsFaulted || r.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
});
return Request.CreateResponse(HttpStatusCode.OK);
}
}
如何命名要写入的文件。
谢谢, 吉姆
答案 0 :(得分:1)
检查this StackOverflow问题。它有Web API 1和Web API 2的答案。
这是保存收到的文件的方法:
FileInfo fileInfo = new FileInfo(provider.FileData.First().LocalFileName);
File.Move(fileInfo.FullName, "/path/to/destination");