通过jQuery在一个Ajax调用中使用其他字符串发送ArrayBuffer
我正在研究一个需要将大文件上传到服务器端的项目。 我决定使用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
发送到我的服务器端。 但是这样我就无法附加name
和index
等其他数据。
我想知道我可以在一次ajax调用中将原始ArrayBuffer(或blob,binary)与我的其他数据(名称,索引)一起发送。
我想我已经解决了这个问题。 我可以使用FormData以一种forms单独使用文件二进制文件转换结构化数据。 像这样的代码
var blob = file.slice(block.start,block.end); //使用formdata在arraybuffer中发送块内容 var fd = new FormData(); fd.append(“name”,block.name); fd.append(“index”,block.index); fd.append(“file”,blob); $就({ url:“/ Home / UploadInFormData”, 数据:fd, processData:false, contentType:“multipart / form-data”, 类型:“POST”, 成功:function(结果){ if(!result.success){ 警报(result.error); } callback(null,block.index); } });
然后从服务器端我可以从Request.Form
检索我的结构化数据,而来自Request.Files[0]
的二进制内容