在不带FileUploader的SAPUI5中上传图像

时间:2018-08-09 11:28:19

标签: javascript sapui5

是否可以使用ODataModel的create方法将文件上传到SAP GW?

我将图像作为Base64字符串发送到后端。在后端执行create-stream方法,并在参数is_media_resource中填充该值。现在,我调用一个功能模块以将图像保存到订单中。

但是当我查看订单附件时,我可以选择“图像”,但是它什么也没有显示。

我的其他代码:

oModel.create(
    sPath, {
      value: oEvent.detail.base64
    }, 
    {
      headers: {
        slug: oEvent.detail.filename
      },
      success: function (oData, oResponse) {
        var aPhotolist = oListsModel.getProperty("/photoList");

        aPhotolist.results.push(oData);
        oListsModel.setProperty("/photoList", aPhotolist);
        oCarousel.getBinding("pages").refresh();
        oDialog.close();
        sap.m.MessageToast.show(JSON.parse(oResponse.headers["sap-message"]).message, {
          closeOnBrowserNavigation: false
        });
      },
      error: function (oError) {
        MessageBox.error(JSON.parse(oError.responseText).error.message.value);
        oDialog.close();
      }
    }
);

1 个答案:

答案 0 :(得分:0)

现在我找到了解决方法:

    var sPath = this.getBindingContext().getPath() + "/ToAttachments",
            oListsModel = this.getModel("listsModel"),
            oCarousel = this,
            imgData = JSON.stringify(oEvent.detail.base64);

        oCarousel.setBusy(true);
        this.getBindingContext().getModel().create(
            sPath,
            imgData, {
                headers: {
                    slug: oEvent.detail.filename
                },
                success: function (oData, oResponse) {
                    var aPhotolist = oListsModel.getProperty("/photoList");

                    aPhotolist.results.push(oData);
                    oListsModel.setProperty("/photoList", aPhotolist);
                    oCarousel.getBinding("pages").refresh();
                    oCarousel.setBusy(false);
                    sap.m.MessageToast.show(JSON.parse(oResponse.headers["sap-message"]).message, {
                        closeOnBrowserNavigation: false
                    });
                },
                error: function (oError) {
                    oCarousel.setBusy(false);
                    MessageBox.error(JSON.parse(oError.responseText).error.message.value);
                }
            });

首先,您必须将图像数据转换为字符串。

在后端,从参数is_media_resource中获取值,然后首先将其从xstring转换回string。

lf_data = is_media_resource-value.

lo_conv_x2c = cl_abap_conv_in_ce=>create( ).

lo_conv_x2c->convert( EXPORTING input = lf_data

                      IMPORTING data  = base64_string ).

之后,将字符串再次转换为xstring。现在是一个xstring,可以由SAP解释

CALL FUNCTION 'SSFC_BASE64_DECODE'
  EXPORTING
    b64data                  = base64_string
  IMPORTING
    bindata                  = lf_data
  EXCEPTIONS
    ssf_krn_error            = 1
    ssf_krn_noop             = 2
    ssf_krn_nomemory         = 3
    ssf_krn_opinv            = 4
    ssf_krn_input_data_error = 5
    ssf_krn_invalid_par      = 6
    ssf_krn_invalid_parlen   = 7
    OTHERS                   = 8.

SAP似乎在解释base64字符串vom Javascript时遇到了一些问题。