如何在不将文件上传到媒体的情况下在 hybris 后台上传文件?

How to upload file in hybris backoffice without uploading it to Media?

我想在 hybris backoffice 中创建一个自定义小部件,它允许从磁盘导入 CSV 文件,CSV 文件中的数据将用于将数据插入数据库。但是,根据我的发现,hybris 只允许从其媒体容器上传文件。

https://help.hybris.com/6.0.0/hcd/8babc4778669101493e3e9234f73106a.html

"The Default File Upload Editor enables you to upload and download binary content from the existing Media."

这非常麻烦 - 首先将文件上传到媒体,然后才从媒体中选择上传的文件以在我的自定义小部件中使用它。

是否可以克服这个问题并直接从磁盘上传文件?

我正在回答我自己的问题,有人可能有类似的问题 - 上面引用的 Hybris 文档似乎具有误导性 - 如果您使用默认文件上传编辑器,它将允许您从磁盘中选择一个文件。

例如 在您的小部件的 zul 文件中:

<editor id="yourCustomEditorId" type="java.io.File" defaultEditor="com.hybris.cockpitng.editor.defaultfileupload" />

将创建两个默认按钮 - 上传和重置

在您的控制器中,您将添加

private Editor yourCustomEditorId;

从中可以得到 FileUploadResult:

FileUploadResult fileUploadResult = (FileUploadResult) yourCustomEditorId.getValue();

*后台中的典型 CSV 文件配置-config.xml

            <wz:property qualifier="csvFile" type="com.hybris.cockpitng.editor.defaultfileupload.FileUploadResult" 
                             editor="com.hybris.cockpitng.editor.dndfileupload" validate="false">
                    <wz:editor-parameter>
                        <wz:name>accept</wz:name>
                        <wz:value>text/csv</wz:value>
                    </wz:editor-parameter>
            </wz:property>

在您的操作中访问它们的典型方式(假设您在 Backoffice 向导中使用模板 bean)

final DefaultWidgetModel productUploadModel = (DefaultWidgetModel) adapter.getWidgetInstanceManager().getModel();

        final ProductUploadWizardForm productUpload = productUploadModel.getValue("PRODUCT_UPLOAD",
                ProductUploadWizardForm.class);

            final FileUploadResult fileUploadResult = productUploadModel
                    .getValue("PRODUCT_UPLOAD" + ".csvFile",
                    FileUploadResult.class);
LOG.info("Value of fileUploadResult.name:" + fileUploadResult.getName());

LOG.info("Print the contents->"+new String(fileUploadResult.getData(), StandardCharsets.UTF_8));