如何将二进制数据作为原始开机自检发送?

How do I send binary data as raw POST?

提问人:Bart Friederichs 提问时间:11/9/2023 最后编辑:Bart Friederichs 更新时间:11/9/2023 访问量:31

问:

我正在使用以下代码将数据二进制化为REST接口:POST

var file = $("#file-to-upload")[0].files[0];
var filename = file.name;
var url = "/upload";
const reader = new FileReader();
reader.onload = function(e) {
    console.log(`Read file data: length: ${e.target.result.length}`);
    $.post({
        url: url, 
        data: e.target.result, 
        headers: {
            "Content-Type": "application/octet-stream",
            "Content-Disposition": `attachment; filename=${filename}`
        },
        success: function(r) {
            console.log(r);
        }
    }).fail(function(xhr, status, error) {
        console.log(xhr);
    });
}
reader.readAsBinaryString(file);

控制台会正确显示文件中的字节数。但是在开发工具中检查实际情况时,我可以看到它发送了更多的数据:POST

enter image description here

enter image description here

e.target.result是一个二进制字符串,没有序列化(奇怪的是,开发控制台显示 26.8kB,而字符串长度为 12817)。

enter image description here

我在这里错过了什么?

jquery 上传 binary-data

评论

0赞 Twisty 11/9/2023
我认为您将创建新的表单数据,而不仅仅是在发布文件时从文件中读取数据。Post Data 应该是 jQuery Post 的对象。数据是否序列化?您能否举个例子e.target.result
0赞 Bart Friederichs 11/9/2023
@Twisty是一个二进制字符串,正是我上传的文件(请参阅更新的问题)。数据未序列化(这是重点)。e.target.result
0赞 Bart Friederichs 11/9/2023
@Twisty我知道我可以通过对二进制数据进行 Base64 编码来解决这个问题,但我想防止这种情况发生(因为这意味着双方都有更多的代码)。如果 JavaScript 中没有其他方法,那么我想我别无选择。
0赞 Twisty 11/9/2023
我建议将生成的数据作为对象的一部分,例如.data: { binary: e.target.result },

答: 暂无答案