当前位置: 首页 > 面试题库 >

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

韦宏扬
2023-03-14
问题内容

我正在尝试将附件上传到通过rest API输入到网页的HTML文件中。API文档指出,该帖子是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文件,两者的结果是相同的。

有人知道我可以进行哪些更改以使其工作吗?


问题答案:

只需将file引用作为数据发送(使用processData: false)至少对我有用:

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

    $.ajax({
        url: "/attachmentURL",
        type: "POST",
        data: file,
        processData: false
    });
});

它在这里描述:https
:
//developer.mozilla.org/en/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data#section_3

发送字符串(即使该字符串表示二进制数据)也不起作用,因为浏览器会强制将其转换为unicode并按照指定的编码为utf-8进行操作,这会破坏二进制数据:

如果data是字符串,则将编码设为UTF-8。

假设mime类型为“ text / plain; charset = UTF-8”。

让请求实体主体为将数据转换为Unicode并编码为UTF-8的数据

发送file参考(blob)将执行以下操作:

如果data是Blob如果对象的type属性不是空字符串,则将mime type作为其值。

令请求实体主体为data表示的原始数据。



 类似资料:
  • 问题内容: 我正在尝试通过ajax以及表单中的某些字段上传文件。但是,它不起作用。我得到这个错误。 未定义索引:-文件 这是我的代码。 的HTML 阿贾克斯 的PHP 我在这里想念什么? 问题答案: 您可以尝试使用: 上面是一个示例代码,但是您可以使用它进行修改。

  • 问题内容: 快速提问 如果我已经使用jquery的函数序列化了表单,那么在可以使用jquery的ajax将其发送出去之前,我需要对其进行任何处理吗? 我可以寄出去吗 原样还是我需要对其进行预处理? 并且,在php中我将如何阅读? 问题答案: 最好在这里使用。这会将表单的值转换为简单的字符串,可用作AJAX调用的属性: 假设您使用方法将其发送到PHP ,则可以使用和访问这些值 编辑:您可以使用以下方

  • 我正在开发一个查看器应用程序,其中服务器捕获图像,执行一些图像处理操作,这需要在客户端显示在HTML5画布上。我写的服务器是在VC和使用http://www.codeproject.com/Articles/371188/A-Cplusplus-Websocket-server-for-realtime-interact. 到目前为止,我已经实现了所需的功能。现在我需要做的就是优化。引用是一个用来

  • 问题内容: 我正在开发一个RESTful Web应用程序(Django + Piston)。POST请求将使用Json编码的数据发送到Web应用程序。这对于我所有的纯文本数据库表都很好,但是我还有一个存储文本和二进制文件的表。将文本和二进制数据发布到RESTful应用程序的最佳方法是什么? 问题答案: 您可以对它进行Base64编码并以字符串形式将其发送到JSON消息中,也可以将二进制文件作为单独

  • 问题内容: 我有一个内置的javascript,它可以执行以下操作:通过ajax-> php-> sql获取内容,并在单击内容后在index.php上显示它,将显示新内容。 现在,我想拥有一个在将内容单击到php之后发送数据的函数,该函数将在db中执行某些操作。如何创建将发送数据的功能?谢谢! 这是我的显示内容的代码: }); }` 问题答案: 您可以通过在jQuery.ajax 设置中包含值,将

  • 问题内容: 我正在尝试将HTTP POST发送到网络上的设备。不幸的是,我想将四个特定字节的数据发送到设备,但我似乎只能将字符串发送到设备。反正有使用JavaScript发送原始二进制文件吗? 这是我用来执行POST的脚本,除非我在数据字段中输入字符串,否则它目前不会运行。有任何想法吗? 问题答案: 默认情况下,jQuery序列化数据(传递的属性)-这意味着将 数字 作为“ 4244668417”