Я пытаюсь отправить двоичные данные как часть сложного типа. Модель для моего типа примерно такая:Отправка двоичных данных в сообщение ajax
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().
Ни один из них не работает. Веб-сервис генерирует ошибку проверки о том, что он не может преобразовать данный текст в байты
Я забыл добавить код dataModel.sendMessage
self.sendMessage = function (data) {
return $.ajax(messageSendUrl, {
type: "POST",
data: data,
headers: getSecurityHeaders()
});
};
При отправке объекта FormData через jQuery ajax вы должны указать 'contentType: false, processData: false' в своем вызове. – Musa
Почему вы пытаетесь это сделать. Это экономить пропускную способность? В этом случае все содержимое может быть сжато вашим веб-сервером? –