我正在尝试将二进制数据作为复杂类型的一部分发送。我的类型的模型是这样的:
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。
看到类似this或https://github.com/vjeux/jParser的内容。