jquery - 在 ajax post 中发送二进制数据

标签 jquery asp.net ajax knockout.js asp.net-web-api

我正在尝试将二进制数据作为复杂类型的一部分发送。我的类型的模型是这样的:

class Message
{
  /* various properties that are ints/dates*/
  int type;
  datetime datedeleted;
  etc ...
  /*blob type which is actually a byte array*/
  byte[] messagecontent;

}

所以我有两种 REST 方法。将文件转换并上传为我们的专有格式,然后将其作为复杂类型发送回,然后将其存储在表单变量中。

self.createMessage = function () {
        self.loading(true);
        var formdata = new FormData();
        jQuery.each($('#file')[0].files, function (i, file) {
            formdata.append('file-' + i, file);
        });
        dataModel.createMessage(formdata)
        .done(function (data) {
            self.messageValue(data.MessageValue);

因此,如果您检查该页面,您将看到如下内容:

<input type="hidden" id="MessageValue" data-bind=" value: messageValue" value="iVBORw0KGgoAAAANSUhEUgAAAfQAAAHRCAYAAACct0sPA ... />

然后,当用户单击“发送”时,我会触发另一个函数。

self.sendMessage = function () {

        dataModel.sendMessage({
            MessageType: self.messageType(),
            ToUser: {
                UserName : self.selectedContactName()
            },
            MessageValue: window.atob(self.messageValue()),

这一行: MessageValue: window.atob(self.messageValue()),

我已经尝试过使用和不使用 atob 的情况。我尝试过更改内容编码。我已经尝试过“data:image/png;base64,”+ messageValue()。

这些似乎都不起作用。 Web 服务抛出验证错误,表示无法将给定文本转换为字节

我忘记添加 dataModel.sendMessage 的代码

self.sendMessage = function (data) {
        return $.ajax(messageSendUrl, {
            type: "POST",
            data: data,
            headers: getSecurityHeaders()
        });
    };

最佳答案

默认情况下,Javascript 几乎不支持读取二进制数据。你可以考虑将其序列化。有一些库可以执行某种形式的二进制数据读取。

查看类似 this 的内容或https://github.com/vjeux/jParser .

关于jquery - 在 ajax post 中发送二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935707/

相关文章:

javascript - 如何停止 Accordion 视频

c# - 找不到程序集 "EntityFramework"

android - Phonegap 本地构建 - jquery ajax 错误 : readystate 0 responsetext status 0 statustext error

javascript 专注于验证失败的文本框,在 Chrome 和 Firefox 中工作方式不同

javascript - 只需用户确认即可从远程服务器下载多个文件

Javascript - socket.io get 显示未找到

jQuery ajax 调用返回双结果

javascript - 突出显示事件 HTML 部分的相应菜单项

javascript - 当内容出现时显示固定标题

javascript - 更改表单序列化数据