Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 通过AJAX Post将文件输入作为FileReader二进制数据发布_Jquery_Ajax_Rest_Filereader - Fatal编程技术网

Jquery 通过AJAX Post将文件输入作为FileReader二进制数据发布

Jquery 通过AJAX Post将文件输入作为FileReader二进制数据发布,jquery,ajax,rest,filereader,Jquery,Ajax,Rest,Filereader,我正试图通过RESTAPI将上传到HTML文件输入到网页的附件发布。API文档声明post是作为HTTP请求主体的直接二进制内容,而不是表单文件上载 我的代码如下: $('#_testButton').bind('click', function () { var file = document.getElementById('_testFile').files[0] var reader = new FileReader(); reader.onload = funct

我正试图通过RESTAPI将上传到HTML文件输入到网页的附件发布。API文档声明post是作为HTTP请求主体的直接二进制内容,而不是表单文件上载

我的代码如下:

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0]
    var reader = new FileReader();
    reader.onload = function () {
        $.ajax({
            url: '/attachmentURL',
            type: 'POST',
            data: reader.result
        })
    }
    reader.readAsBinaryString(file)
})
我需要它为许多不同的mimetype工作,所以我没有在上面的代码中声明它。但是,我已经尝试为.doc文件声明contentType:'application/msword',还尝试了processData:false和contentType:false

数据正在发布到应该发布的位置。但是,当我打开文件时,会收到一条消息,上面写着mimeType:application/x-empty,其中包含一个空文件或一个包含一组二进制字符的文件。我尝试了.doc文件和pdf文件,结果都是一样的


有人知道我可以改变什么来实现这一点吗?

只需将
文件
引用作为数据发送(使用
processData:false
)至少为我完成了以下任务:

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0];

    $.ajax({
        url: "/attachmentURL",
        type: "POST",
        data: file,
        processData: false
    });
});
这里描述的是:

发送字符串(即使该字符串表示二进制数据)将不起作用,因为浏览器将强制将其转换为unicode并编码为utf-8,这将损坏二进制数据:

如果数据是字符串,则编码为UTF-8

让mime类型为“text/plain;charset=UTF-8”

将请求实体体数据转换为Unicode并进行编码 作为UTF-8

发送
文件
引用(
blob
)将执行以下操作:

如果对象的type属性不是空的,则数据是Blob 字符串让mime类型作为其值

让请求实体主体是由数据表示的原始数据

var文件

        $('#_testFile').on("change", function (e) {
            file = e.target.files[0];
        });
        $('#_testButton').click(function () {
            var serverUrl = '/attachmentURL';

            $.ajax({
                type: "POST",
                beforeSend: function (request) {
                    request.setRequestHeader("Content-Type", file.type);
                },
                url: serverUrl,
                data: file,
                processData: false,
                contentType: false,
                success: function (data) {
                    console.log("File available at: ", data);
                },
                error: function (data) {
                    var obj = jQuery.parseJSON(data);
                    alert(obj.error);
                }
            });
        });

-1:OP说,服务器想要的是直接的二进制内容,而不是包含在表单数据中的内容。@EricH。我会仔细研究一下,想出一个解决办法。我只是误解了你的意图。伊莎莉亚:哈哈,看来你把它当作你的社交网络了@埃里克。你做这件事的方式,在我看来很好;除非服务器正在寻找其他内容。@strusthmaster,否则它现在应该直接将二进制数据作为POST数据发送。也测试过了P@Esailija-1撤回,和+1.)这是客户端的脚本!jQuery