Как читать изображение с помощью oDatamodel V2 в sapui5?

Я застрял, пытаясь прочитать изображение из шлюза.

Если я запускаю этот uri прямо в шлюзе SAP, он работает нормально, и данные изображения читаются: /sap/opu/odata/sap/ZSA_USERS_SRV/UserPhotoSet('[email protected]')/$value "

Теперь я хочу прочитать это изображение в моем приложении sapui5, используя приведенный ниже код, но я просто получаю сообщение об ошибке «EventProvider sap.ui.model.odata.v2.ODataModel - служба не получила данных:»

Что мне здесь не хватает?

var oModel = this.getOwnerComponent().getModel();
    oModel.read("/UserPhotoSet('[email protected]')/$value", {
        success: function(oData, oResponse) {
            alert("Success read userphotto");
            img.setSrc(oData);
        },
    }); 

person Oscar Bermedo    schedule 06.02.2017    source источник
comment
работает ли uri /sap/opu/odata/sap/ZSA_USERS_SRV/UserPhotoSet('[email protected]')/$value в браузере?   -  person Stephen S    schedule 06.02.2017
comment
Привет! Да хорошо работает в браузере!   -  person Oscar Bermedo    schedule 06.02.2017
comment
Какие данные ответа вы получаете об успехе этой услуги.   -  person Saddamhussain    schedule 07.02.2017
comment
Ответом будет следующая строка: data: image / jpeg; base64, / 9j / 4AAQSkZJRgABAQAAAQABAAD / 2wBDABALDA4MChAODQ4SERA .... Пояснение к этим данным: Эти данные взяты из таблицы SAP. Я просто получаю изображение с камеры и объединяю строку data: image / jpeg; base64 перед setSrc элемента изображения. Затем я сохраняю результат getSrc из этого же элемента с помощью oDataModel.Create   -  person Oscar Bermedo    schedule 07.02.2017


Ответы (2)


Не используйте oModel.read (...)! В вашем случае все, что вам нужно сделать, это

img.setSrc("/path/to/my/service/UserPhotoSet('[email protected]')/$value");

Свойство src изображения представляет собой строку - это URI!

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

Конечно, вы должны заменить "/ path / to / my / service /" на реальный путь ...

person Nabi    schedule 06.02.2017
comment
Привет, Наби! Спасибо за ответ! Я сделал то, что вы рекомендовали, но изображение не загружается. это то, что я поместил в src изображения в моем фрагменте XML: <Image id="imgPreviewForm" class="sapUiSmallMarginTopBottom" width="300px" height="150px" visible="true" src="/sap/opu/odata/sap/ZSA_USERS_SRV/UserPhotoSet('[email protected]')/$value"></Image> В сети ответ только говорит, что этот запрос не имеет доступных данных ответа, и я не вижу там ошибки: / - person Oscar Bermedo; 06.02.2017
comment
Как правило, с помощью $ value вы возвращаете реальное содержимое файла изображения вместо строки base64. После того, как вы добавили несколько дополнительных подсказок, я могу видеть, что ваша служба возвращает файл в виде строки base64, верно? И это потому, что файл таким образом хранится в БД. Я не уверен, что элемент управления Image может правильно обрабатывать URI данных. В любом случае, что вы могли бы сделать, так это декодировать строку base64 на бэкэнде, прежде чем отправлять ее во фронтенд. Я бы предпочел не делать это каждый раз ... - person Nabi; 08.02.2017
comment
Трудно помочь, не зная всех деталей вашей службы, но, возможно, рабочие примеры на blogs.sap.com/2017/02/08/ справка. - person Nabi; 08.02.2017
comment
Спасибо за объяснение. Я обнаружил, что проблема в том, что я неправильно сохранял фотографию с камеры, но я не знаю почему. Я выполнил шаги этого блога ссылка Но я все еще не знаю, как правильно вызвать метод post 'your_service / UserSet (' usermail ') / Photo' из моего приложения sapui5. Я отказываюсь от этого способа, и теперь я отправляю данные из src изображения прямо в строку, и я делаю преобразование в двоичный файл в бэкэнде. Теперь значение read / $ работает - person Oscar Bermedo; 09.02.2017

В XML:

<Image id="imgPreviewForm" 
       class="sapUiSmallMarginTopBottom" 
       width="300px" height="150px" visible="true" src="">
</Image>

В контроллере Javascript:

    var img=this.getView().byId("imgPreviewForm");
    img.setSrc("/sap/opu/odata/sap/ZTEST_PDF_SRV/FileSet
                ('Test.jpg')/$value");
person Lakshmareddy Surapureddy    schedule 17.07.2017
comment
он работает нормально, но мой аспект отправить один запрос получить больше изображений, которые будут храниться на модели. эта модель настроена на просмотр. как я могу это сделать? - person Lakshmareddy Surapureddy; 17.07.2017