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。
场景: 在我的 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。