Как отправлять изображения через сервер Worklight без кодировки base64?

Я пытаюсь выяснить, как отправлять изображения на мой внутренний сервер с помощью адаптеров Worklight. Я знаю, что могу отправлять их через адаптеры Worklight, используя кодировку Base64, но это подразумевает увеличение трафика между серверами примерно на 30% и некоторые нежелательные накладные расходы на обработку.

На данный момент я использую библиотеку Phonegap FileTransfer, как показано ниже, но это создает прямое соединение между клиентом и внутренним сервером, а не через сервер Worklight, как я хочу.

var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";

var headers = {"Content-Type": "image/jpeg"};
options.headers = headers;

var ft = new FileTransfer();
ft.upload(imageURI, encodeURI(host + "/images"), imageUploadSuccess, imageUploadFail, options);

function imageUploadSuccess(r) {
    WL.Logger.debug("Submit success! HTTP Status Code = " + r.responseCode);
    WL.Logger.debug("Response = " + r.response);
    WL.Logger.debug("Bytes sent = " + r.bytesSent);
    $.mobile.changePage('#SuccessPage');
}
function imageUploadFail(error) {
    WL.Logger.debug("submit error! source = " + error.source);
    WL.Logger.debug("target = " + error.target);
    $.mobile.changePage('#FailPage');
}

Есть ли способ, которым я могу это сделать?

Заранее спасибо.

-- Редактировать --

Другая возникающая проблема заключается в том, что когда мой внутренний сервер получает файл, он кажется поврежденным и не может быть прочитан как изображение.


person felipeh    schedule 05.11.2013    source источник
comment
Если вы хотите пройти через сервер Worklight, единственный способ — это адаптеры Worklight.   -  person Idan Adar    schedule 05.11.2013
comment
Если вас беспокоит увеличение размера полезной нагрузки из-за кодировки, вы можете запросить сжатие вашего ответа, используя параметр compressResponse в вашем invokeProcedure   -  person Srik    schedule 05.11.2013
comment
Спасибо за комментарии. @IdanAdar, это то, что я хотел знать, могу ли я использовать адаптеры для отправки изображения без кодирования. @Srik, но сжатие будет применяться только к ответу (JSON), а не к изображению, которое я хочу отправить с помощью HTTP POST.   -  person felipeh    schedule 05.11.2013
comment
Извините, я неправильно понял ваш вопрос. В настоящее время я не могу придумать способ отправки двоичных данных на сервер Worklight без кодирования base64, потому что JavaScript не предлагает прямого способа работы с двоичными потоками.   -  person Srik    schedule 08.11.2013
comment
@felipeh есть новости? любое решение? при чтении gonzalo123.com/2013/10/28/ Я также вижу, что изображения base64 также могут вызывать проблемы с памятью на устройстве. Может ли передача файлов Cordova быть частью решения?   -  person WiPhone    schedule 24.08.2014


Ответы (1)


В настоящее время адаптеры Worklight не поддерживают отправку данных в двоичной форме.

Это означает, что в настоящее время ваш единственный вариант - это тот, который вам не нравится, а именно кодировать файл изображения с помощью base64 и сохранять результирующую строку в базе данных, а когда вам нужно ее использовать, декодировать ее с помощью base64.

person Idan Adar    schedule 03.02.2015
comment
Я использую ibm mobile first 8.0, могу ли я отправлять двоичные данные в свой адаптер, используя API клиента javascript внутри полезной нагрузки? - person Nishant Tanwar; 19.12.2016
comment
Возможно, это поможет: mobilefirstplatform.ibmcloud.com/blog/2016/12/05/ - person Idan Adar; 19.12.2016