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

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在默认情况下几乎不支持读取二进制数据。您可以考虑对其进行序列化。有一些库可以执行某种形式的二进制数据读取afaik。

看到类似thishttps://github.com/vjeux/jParser的内容。

10-01 15:08