通过jQuery在一个Ajax调用中使用其他字符串发送ArrayBuffer

前端之家收集整理的这篇文章主要介绍了通过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发送到我的服务器端.但是这样我就无法附加名称和索引等其他数据.

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

猜你在找的jQuery相关文章