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();
是不是有冗余的气味?
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();
是不是有冗余的气味?
相关文章推荐
- ASP.NET WebAPi(selfhost)实现文件同步或异步上传
- asp.net uploadify实现多附件上传功能
- ASP.NET多附件上传和附件编辑的实现
- ASP.NET 多附件上传实现代码
- JS实现多附件上传(asp.net)
- asp.net 无刷新附件上传实现方法
- ASP.NET多附件上传和附件编辑的实现
- 在ASP.NET将程序中将上传的附件存储到另一台文件服务器上的实现
- 在ASP.NET将程序中将上传的附件存储到另一台文件服务器上的实现
- asp.net 无刷新附件上传实现方法
- JS实现多附件上传(asp.net)
- ASP.NET 多附件上传实现代码
- ASP.NET WebAPi(selfhost)实现文件同步或异步上传
- asp.net uploadify实现多附件上传功能
- asp.net结合uploadify实现多附件上传
- asp.net结合uploadify实现多附件上传
- ASP.NET MVC WebAPI实现文件批量上传
- asp.net结合uploadify实现多附件上传
- ASP.NET多附件上传和附件编辑的实现
- Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)