我正在研究一个需要将大文件上传到服务器端的项目.我决定使用HTML5 FileReader和jQuery以块(ArrayBuffer)上传文件.
我通过将块转换为base64字符串成功完成了此任务,通过jQuery.post使用JSON格式的data参数发送到后端服务器.
例如
$.ajax({
url: "/Home/Upload",type: "POST",data: {
name: block.name,index: block.index,base64: base64
},processData: true
});
但我想优化此代码,因为base64太大而无法转换.我想知道我是否可以通过$.ajax直接发送ArrayBuffer.
我知道如果我设置processData:false并将ArrayBuffer放入数据参数,它可以作为Request.InputStream发送到我的服务器端.但是这样我就无法附加名称和索引等其他数据.
我想知道我可以在一次ajax调用中将原始ArrayBuffer(或blob,二进制文件)与我的其他数据(名称,索引)一起发送.
最佳答案
我想我已经解决了这个问题.我可以使用FormData以一种形式单独使用文件二进制文件转换结构化数据.像这样的代码
var blob = file.slice(block.start,block.end); // use formdata to send block content in arraybuffer var fd = new FormData(); fd.append("name",block.name); fd.append("index",block.index); fd.append("file",blob); $.ajax({ url: "/Home/UploadInFormData",data: fd,processData: false,contentType: "multipart/form-data",success: function (result) { if (!result.success) { alert(result.error); } callback(null,block.index); } });
然后从服务器端我可以从Request.Form检索我的结构化数据,而来自Request.Files [0]的二进制内容