6

我正在做一个需要将大文件上传到服务器端的项目。我决定使用 HTML5 FileReader 和 jQuery 以块(ArrayBuffer)的形式上传文件。

我通过将块转换为base64字符串成功完成了这项任务,通过jQuery.post发送到后端服务器,数据参数为JSON格式。

例如

$.ajax({
    url: "/Home/Upload",
    type: "POST",
    data: {
        name: block.name,
        index: block.index,
        base64: base64
    },
    processData: true
});

但我想优化这段代码,因为 base64 太大而无法转换。我想知道我是否可以直接通过$.ajax.

我知道如果我设置processData: falseArrayBuffer 并将其放入 data 参数中,它可以作为Request.InputStream. 但是这样我就无法附加其他数据,例如nameindex

我想知道我可以在一个ajax调用中单独发送原始ArrayBuffer(或blob,二进制)和我的其他数据(名称,索引)。

4

1 回答 1

5

我想我已经解决了这个问题。我可以使用 FormData 将结构化数据单独转换为一种形式的文件二进制文件。像这样的代码

var blob = file.slice(block.start, block.end);
// 使用formdata在arraybuffer中发送块内容
var fd = new FormData();
fd.append("名称", block.name);
fd.append("index", block.index);
fd.append("文件", blob);
$.ajax({
    url: "/Home/UploadInFormData",
    数据:fd,
    处理数据:假,
    contentType: "multipart/form-data",
    类型:“发布”,
    成功:函数(结果){
        如果(!result.success){
            警报(结果。错误);
        }
        回调(空,block.index);
    }
});

然后从服务器端我可以检索我的结构化数据,Request.Form而二进制内容来自Request.Files[0]

于 2013-06-27T06:56:38.937 回答