您的位置:首页 > 编程语言 > ASP

ASP.NET WebApi 实现多附件上传

2014-02-10 01:15 585 查看
前几天调查 ASP.NET WebApi 实现 multipart/form-data 文件上传功能时,遇到一个问题正好记录下来。

multipart/form-data 经常用于多附件上传,其中数据是以 boundary 进行分割,形如:



紧接着 boundary 的是该部分数据的描述。形如:



服务端代码:
// POST api/values
public HttpResponseMessage Post()
{
var content = Request.Content;
var uploadDir = HttpContext.Current.Server.MapPath("~/Upload");
var newFileName = "";

var sp = new MultipartMemoryStreamProvider();
Task.Run(async () => await Request.Content.ReadAsMultipartAsync(sp)).Wait();

foreach (var item in sp.Contents)
{
if (item.Headers.ContentDisposition.FileName != null)
{
var filename = item.Headers.ContentDisposition.FileName.Replace("\"", "");
newFileName = uploadDir + "\\" + filename;
var ms = item.ReadAsStreamAsync().Result;
using (var br = new BinaryReader(ms))
{
var data = br.ReadBytes((int)ms.Length);
File.WriteAllBytes(newFileName, data);
}
}
}

var result = new Dictionary<string, string>();
result.Add("result", newFileName);
var resp = Request.CreateResponse(HttpStatusCode.OK, result);
resp.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
return resp;
}
细心的你会注意到,这句代码:
Task.Run(async () => await Request.Content.ReadAsMultipartAsync(sp)).Wait();

是不是有冗余的气味?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: