通过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发送到我的服务器端。 但是这样我就无法附加nameindex等其他数据。

我想知道我可以在一次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]的二进制内容