如何在不将文件上传到媒体的情况下在 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));
我想在 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));