【发布时间】:2014-06-08 17:40:56
【问题描述】:
我想用 JavaScript 分块上传一个大文件 - 即使用 File API 对其进行切片,然后将切片 blob 发布到服务器。我可以这样做:
Javascript:
// file is a file from an file select input element
var data = new FormData();
data.append('Slice', file.slice(start, end));
$http.post('/api/upload', data); //I'm using AngularJS
MVC Web API 控制器:
public async Task Post()
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var stream = provider.Contents.First().ReadAsStreamAsync().Result;
没有文件切片,我可以轻松发布 JSON,并使用模型绑定来获取它:
Javascript:
var model = {};
model.CurrentBlock = 0;
model.FileName = file.name;
$http.post('/api/upload', model);
服务器:
public class UploadModel
{
public string CurrentBlock { get; set; }
public string FileName { get; set; }
}
public async Task Post(UploadModel model)
{
}
我不知道如何在单个请求中同时执行这两项操作 - 发布文件切片和一些 JSON 元数据。我似乎无法创建模型属性和 blob 数据的任何 JSON 对象,这些对象将被模型绑定的控制器方法参数的任何组合拾取。我试过这样的事情:
public async Task<UploadModel> Post(UploadModel model, HttpPostedFileBase file)
或者直接将文件blob添加到模型中:
var model = {};
model.CurrentBlock = 0;
model.FileName = file.name;
model.Payload = file.slice(start, end)
$http.post('/api/upload', model);
但它永远不会通过。我确定我错过了一些简单的东西。
【问题讨论】:
标签: javascript asp.net-mvc asp.net-mvc-5 asp.net-web-api2