JIRA билетов, созданный из-за отказа base64encode: https://jira.appcelerator.org/browse/TC-5876Невозможно сделать изображение Blob JSON Serializable
Мой текущий CFG: Titanium SDK 5.1.2.GA Тестирование на iPhone IOS 9.1
Я нахожусь застрял в проблеме в проекте для клиента, который требует, чтобы изображения принимались на устройстве (с помощью камеры), которое отправлялось в WebService, а затем просматривалось на любом устройстве с помощью приложения (как на устройствах Android, так и на iOS). Titanium предоставляет объект Ti.Blob (event.media) после снимка (который не является сериализуемым JSON), и мне нужно как-то отправить его на сервер. Сервер всегда отвечает за объект JSON, поэтому этот Blob должен быть как-то сериализуемым JSON.
Я пробовал много способов без успеха:
1 - Base64Encode блоб
var base64blob = Ti.Utils.base64encode(event.media);
не работает, это заклинивание приложение и бросает ASL превышена максимальная погрешность размера. Я полагаю, что изображение слишком велико, чтобы быть base64encoded.
2 - Прочитайте Blob в буфер
var blobStream = Ti.Stream.createStream({ source: event.media, mode: Ti.Stream.MODE_READ });
var buffer = Ti.createBuffer({ length: event.media.length });
var bytes = blobStream.read(buffer);
Это работает, но я понятия не имею, как я могу преобразовать этот буфер держа содержимое образа в то, что сервер может вернуться в объект JSON, а затем быть снова превратился в Image Blob.
Сервер не может управлять объектами Ti.Blob или объектами Ti.Buffer, поскольку, прежде всего, это объекты Titanium, а сервер - на C#, а второй - из Ti.Blob и Ti.Buffer. JSON сериализуется, поэтому возврат JSON не работает.
Что мне нужно в основном описано в воображаемом примере ниже:
var imageBlob = event.media;
var JSONSerializableImg = imageBlob.toJSON();
sendImageToServer(JSONSerializableImg);
var imgFromServer = getImageFromServer();
var imageBlob = imgFromServer.toBlob();
var imgView = createImageView({
image: imageBlob
});
Я надеюсь, что кто-то может помочь мне с каким-либо методом преобразования возможно.
Спасибо-х
Я ничего не знаю о Ti.BLOB. Но BLOB должен быть двоичным большим объектом. Итак, если вы консолируете запись BLOB, я бы предположил, что вы получаете двоичную строку. Вы могли: a) попытаться передать эту строку в объект JS: {blob: [BINARY]}, а затем использовать JSON.stringify (object) и отправить его на сервер. На стороне сервера вы можете попробовать и проанализировать двоичный файл и, используя SQL, вставить его в объект BINARY (MAX) или VARCHAR (MAX). Обратный процесс для просмотра. b) разбить BLOB на несколько меньших массивов и нажимать каждый отдельно с приложением и реорганизовывать его на сервер, а затем хранить. – Rouse02
Вы говорите, что «сервер всегда отвечает за объект JSON», но что принимает ваш сервер? Вы загружаете свое изображение, например. многостраничная загрузка? Или любой другой? У вас есть больше информации о вашей конечной точке, на которую вы загружаете изображения? – davidcyp
@ Rouse02 Ti.Blob - это объект, принадлежащий Titanium API (см. Это: http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Blob). Я могу извлечь его содержимое в буфер и затем декодировать его с помощью Ti.Codec (см. Это: http://docs.appcelerator.com/platform/latest/#!/guide/Buffer_and_Codec) Как вы думаете, я могу JSON. что-то с помощью этих объектов? Я знаю, что вы не знаете Титана, но, возможно, вы посмотрите на документацию, вы можете найти решение. –