【发布时间】:2015-07-29 00:05:07
【问题描述】:
我尝试在将文件从 AngularJS 上传到 WebApi 时发布 formData。由于某种原因,所有值都被编码为 %5B%5D 键是正常的。我正在使用库来上传文件。是 JavaScript 问题还是 WebApi。有什么想法吗?
uploadFile: function(ids, files, success, progress, error) {
return $upload.upload({
url: '/Api/User/UploadFile',
method: "POST",
data: { ids: ids },
file: files
}).progress(progress).success(success).error(error);
}
public async static Task<MultipartContent> GetMulipartContent(ApiController controller)
{
if (!controller.Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
var fileData = new List<KeyValuePair<string, byte[]>>();
await controller.Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.FileData)
{
fileData.Add(new KeyValuePair<string, byte[]>(
file.Headers.ContentDisposition.FileName,
File.ReadAllBytes(file.LocalFileName)));
FileHelper.WaitFileUnlockedAsync(() => File.Delete(file.LocalFileName), file.LocalFileName, 30, 800);
}
return new MultipartContent(provider.FormData, fileData);
}
}
public class MultipartContent
{
public MultipartContent(NameValueCollection formData, List<KeyValuePair<string, byte[]>> fileData)
{
FormData = formData;
FileData = fileData;
}
public NameValueCollection FormData { get; private set; }
public List<KeyValuePair<string, byte[]>> FileData { get; private set; }
}
【问题讨论】:
标签: c# angularjs asp.net-web-api