SAPUI5 .xlsx 文件上传到 oData 创建流 - xstring 转换错误

SAPUI5 .xlsx file upload to oData create stream - error in xstring conversion

场景: 在我的 UI5 应用程序中使用 sap.ui.unified.FileUploader,用户可以 select 具有多个选项卡的 .xlsx 文件上传到后端 oData服务。在后端 oData 服务中,我实现了 CREATE_STREAM 方法来接收数据。这里我想使用class“cl_fdt_xl_spreadsheet”创建Excel文件,读取表格和数据等并做一些处理。

问题: 当点击后端 CREATE_STREAM 方法时,我假设 is_media_resource-value 中的数据是 xstring 格式,但是在尝试创建对象时使用 cl_fdt_xl_spreadsheet,我收到错误“文档格式无效”。

查看代码

                    <u:FileUploader id="xlsUploader" 
                                name="iwbChecklistUpload" 
                                fileType="xlsx"
                                maximumFilenameLength="250"
                                maximumFileSize="2000"
                                uploadOnChange="false"
                                uploadUrl="{uploadModel>/xlsUrl}"
                                filenameLengthExceed=".filenameTooLong"
                                fileSizeExceed=".fileSizeExceeded"
                                typeMissmatch=".fileTypeMismatch"
                                uploadComplete=".xlsComplete"
                                uploadProgress=".xlsProgress"
                                sendXHR="true"/>

控制器

        onUpload: function(oEvent){
        var oModel = this.getOwnerComponent().getModel();
        var uploadModel = this.getView().getModel("uploadModel");
        var xlsUploader = this.getView().byId("xlsUploader");
        var xlsDomRef = xlsUploader.getFocusDomRef();

        var xlsFile = xlsDomRef.files[0]; //Only one

        if(xlsFile){
            var oHeaderToken = new sap.ui.unified.FileUploaderParameter({
                name: "x-csrf-token",
                value: oEvent.getSource().getModel().getSecurityToken()
            });
            var oHeaderSlug = new sap.ui.unified.FileUploaderParameter({
                name: "slug",
                value: xlsFile.size + "|" + xlsUploader.getProperty("value") 
            });
        
            xlsUploader.removeAllHeaderParameters();
            xlsUploader.addHeaderParameter(oHeaderToken);
            xlsUploader.addHeaderParameter(oHeaderSlug); 
            xlsUploader.upload()
        }

后端oData CREATE_STREAM

        DATA: lo_converter TYPE REF TO cl_abap_conv_in_ce,
          lv_xstring   TYPE xstring,
          lv_string type string.

    DATA : lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .

    lv_xstring = is_media_resource-value.


    TRY .
        lo_excel_ref = NEW cl_fdt_xl_spreadsheet(
                                document_name = 'iwbcl.xlsx'
                                xdocument     = lv_xstring ) .
      CATCH cx_fdt_excel_core into data(oRef).
        "Error caught here - Invalid document format
    ENDTRY .

任何帮助将不胜感激。我确实以类似的方式上传图片,那里没有问题。
我的想法是 is_media_resource-value 中的流以某种方式不是 xstring(在我的文件上传器中使用 sendXHR="true" 可能会导致这种情况)。 我应该在某处指定 mime 类型吗?

我们有一个非常相似的用例。我看到的唯一区别是我们有 useMultipart="false"。启用多部分(默认)后,xstring 可能看起来有所不同,因为它包含的不仅仅是 XSLX 文件。查看 xstring 时,正确的 XLSX 文件将以 50 4B 03 04.

开头

有关 useMultipart 属性 的更多信息,请参阅 the docs