使用 IE11 的工作程序使用 multipart/form-data 发送二进制数据

2024-05-17

我正在尝试发送multipart/form-data来自 IE 的工作人员。我已经使用 Chrome、Firefox、Safari 完成了此操作formData对象(不支持IE,我需要一个手动的)

我发送的二进制数据是 crypto-js 加密数据。和formData我做的对象:

var enc = new Buffer(encrypted.ciphertext.toString(CryptoJS.enc.Base64), 'base64');
formData.append("userFile" , new Blob([finalEncrypted], {type: 'application/octet-binary'}), 'encrypted')
this works fine generating a multipart like this(missed some parts of it):

请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate
Cache-Control:no-cache
Connection:keep-alive
Content-Length:30194
Content-Type:multipart/form-data; boundary=WebKitFormBoundary0.gjepwugw5cy58kt9

body:

--WebKitFormBoundary0.gjepwugw5cy58kt9
Content-Disposition: form-data; name="userFile"; filename="encrypted"
Content-Type: binary

所有二进制数据

--WebKitFormBoundary0.cpe3c80eodgc766r--

随说明书multipart/form-data:

IE11 doesn't accept readAsBinaryString(deprecated)

我想避免发送 base64 编码数据(readAsDataURL)(33% 有效负载)

我发送的二进制数据是 crypto-js 加密数据。 我想:

finalEncrypted = new Buffer(encrypted.ciphertext.toString(CryptoJS.enc.Base64), 'base64');

然后在我的手动多部分中,我尝试将缓冲区转换为二进制字符串:

item.toString('binary')

多部分结果看起来如下:

--WebKitFormBoundary642013568702052
Content-Disposition: form-data; name="userfile"; filename="encrypted"
Content-Type: binary

所有二进制数据

ÐçÀôpRö3§]g7,UOÂmR¤¼ÚS"Ê÷UcíMÆÎÚà/,hy¼øsËÂú@WcGvºÆÞ²i¨¬Ç~÷®}éá?'é·J]þ3«áEÁÞ,4üBçðºÇª bUÈú4
T\Ãõ=òEnýR  _[1J\O-ïǹ C¨\Ûøü^%éÓÁóJNÓï¹LsXâx>\aÁV×Þ^÷·{|­'

在 .NET 服务器上,我们检查客户端计算的哈希值与服务器计算的哈希值。服务器回复哈希值不匹配。这让我认为我没有正确发送文件。


看来您还没有找到解决方案,至少如果您有解决方案的话,您没有将其发布在这里。

最后,我使用 jQuery 来处理实际帖子的低级细节。

可能是您做错了一件小事而 IE 失败了。因为您没有显示您使用 FormData 的内容。很难看出你那里是否有错误。

// step 1. setup POST data
var data = new FormData();
data.append("some_variable_name", "value_for_that_variable");
data.append("some_blob_var_name", my_blob);
data.append("some_file_var_name", my_file);

// step 2. options
var ajax_options =
    {
        method: "POST",
        processData: false,
        data: data,
        contentType: false,
        error: function(jqxhr, result_status, error_msg)
        {
            // react on errors
        },
        success: function(data, result_status, jqxhr)
        {
            // react on success
        },
        complete: function(jqxhr, result_status)
        {
            // react on completion (after error/success callbacks)
        },
        dataType: "xml" // server is expected to return XML only
    };

// step 3. send
jQuery.ajax(uri, ajax_options);

Step 1.

创建一个FormData对象并填充表单数据,包括变量和文件。您甚至可以添加blobs(JavaScript 对象,将被转换为JSON如果我是对的。)

Step 2.

创建一个ajax_options反对你的喜好。虽然我在这里向您展示method, processData, data, contentType因为它们必须是以防万一您想发送FormData。至少,这对我有用......也许可以改变其中一些价值观。

dataType 应设置为您期望返回的任何类型。

Step 3.

使用发送请求ajax() http://api.jquery.com/jquery.ajax/来自 jQuery 库的函数。它将根据客户端浏览器的需要构建正确的标头和结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 IE11 的工作程序使用 multipart/form-data 发送二进制数据 的相关文章

随机推荐

  • 使用 www 和裸域来指向我的 heroku 应用程序

    我无法将 www domain org 和 domain org 设置为指向 Heroku Rails 应用程序 我做了从 www 到 www example org herokudns com 的 CNAME 它工作正常 我的 www e
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • 使用 ggplot 构面时增加闪亮的绘图大小

    有没有办法增加绘图窗口的大小shiny取决于在一个中使用的面的数量ggplot图 也许使用垂直滚动 例如 使用下面的示例 当输入为 A 有三个方面 情节看起来不错 当选项 B 选择绘图数量会增加 但绘图窗口保持相同大小 导致绘图太小 是否有
  • 带有 CUDA 的 Tensorflow:导入错误

    我已经按照 NVIDIA 教程中的说明一步步安装了 TensorFlow Ubuntu 16 04 桌面版 GTX 970 http www nvidia com object gpu accelerated applications te
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • HTML5 视频:使用 Blob URL 流式传输视频

    我有一个 Blob 数组 实际上是二进制数据 我可以表达它 但是效率最高 我现在正在使用 Blob 但也许Uint8Array或者有什么会更好 每个 Blob 包含 1 秒的音频 视频数据 每秒都会生成一个新的 Blob 并将其附加到我的数
  • 在 C# 中选择动态创建的列表框项目

    我动态创建了一个Listbox并用一些项目填充它 在输入一个点后Textbox我想展示Listbox以便用户可以使用箭头键选择任何项目 到目前为止我已经做了所有事情 当用户在其中输入一个点时Textbox The Listbox显示 但方向
  • 获取 System.Drawing.Font 宽度?

    我正在使用 Net 工具进行一些 2D 绘图 System Drawing Font uses a GetHeight 返回以像素为单位的高度 我缺少一个GetWidth 检索宽度 我应该用什么 Use Graphics MeasureSt
  • 如何在MAMP中设置环境变量?

    如何在 MAMP 版本 3 3 中设置环境变量 我可以在我的 PHP 应用程序中使用它 我已经更新了 Applications MAMP Library bin envvars and envvars std file并添加以下行 Lice
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • 汇总表中各列的字符值比例

    在这种数据框中 df lt data frame w1 c A A B C A w2 c C A A C C w3 c C A B C B 我需要计算所有列中字符值的列内比例 有趣的是 以下代码适用于大型实际数据集 但对上述玩具数据会引发错
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • Cassandra Read 花费的时间比预期要长

    我正在使用带有 CQL3 的 cassandra 1 2 我的键空间中有三个列族 当我查询其中一个列族 电话 时 需要很长时间才能检索 这是我的查询 select from phones where phone no in 90384875
  • 将 int 复制到 byte[] 的最简单方法

    我有一个 byte 我正在迭代 int 列表 和其他数据 我想将 int 复制到我的 byteArray index 4 我该怎么做 BitConverter http msdn microsoft com en us library sy
  • 如何防止 iframe 中的链接在新选项卡中打开

    我为我制作的基于网络的操作系统制作了一个基于网络的小型网络浏览器 我注意到在某些网站中 它们有喜欢在新选项卡中打开的链接 有没有办法可以防止这种情况并在 iframe 中打开链接 这是我的整个浏览器的代码 以防万一
  • C 预处理器宏不解析逗号分隔的标记?

    我想根据参数的数量选择两个函数之一 nargs 0 gt f1 nargs gt 0 gt f2 宏执行以下操作 获取第一个参数 如果没有提供参数 则会添加两个逗号 NULL NULL 然后它会从返回的参数列表中选择第二个参数 例如 f H
  • C++ Boost 多精度 cpp_int

    我尝试获取一个大数字的日志 我该怎么做呢 我无法使用 gmp hpp 因为它说Cannot open include file gmp h No such file or directory 下面的代码 include
  • Spring Batch 死锁 - 无法增加身份;嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException

    我们正在将 Spring Batch 应用程序从 Oracle DB 迁移到 Azure SQL Server 我在尝试执行时收到以下错误两个不同的工作同时更新不同的表 但使用相同的公共 BATCH 表 引起原因 org springfra
  • 奇怪的跨线程 UI 错误

    我正在编写一个 WinForms 应用程序 它有两种模式 控制台或 GUI 同一解决方案中的三个项目 一个用于控制台应用程序 一个用于 UI 表单 第三个用于保存两个界面也将连接的逻辑 控制台应用程序运行绝对流畅 保存用户选择的模型 它有一
  • 使用 IE11 的工作程序使用 multipart/form-data 发送二进制数据

    我正在尝试发送multipart form data来自 IE 的工作人员 我已经使用 Chrome Firefox Safari 完成了此操作formData对象 不支持IE 我需要一个手动的 我发送的二进制数据是 crypto js 加