我正在尝试将二进制数据作为复杂类型的一部分发送。我的类型的模型是这样的:
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服务抛出一个验证错误,指出它无法将给定文本转换为byte
我忘了添加dataModel.sendMessage的代码
self.sendMessage = function (data) {
return $.ajax(messageSendUrl, {
type: "POST",
data: data,
headers: getSecurityHeaders()
});
};
答案 0 :(得分:0)
默认情况下,Javascript几乎不支持读取二进制数据。你可以考虑序列化它。有一些库可以做某种形式的二进制数据读取。
答案 1 :(得分:0)
我实际上决定走另一条路。在我的模型中,我将类型从字节数组更改为字符串,只需对其进行base64编码,然后在第二次调用时将其取消编码。