编写我自己的图像导入器时,导入后图片不会被识别为图片

时间:2018-04-04 06:56:18

标签: broadleaf-commerce

我正在为我的产品目录编写自己的图像导入。我想从本地文件系统中读取图像并将它们存储在配置的资源文件夹中。目前进口非常简单。它是管理项目中的一个控制器,我通过调用URL来触发它。

它正在创建文件以及文件夹结构,文件似乎有相同的文件大小,但不知何故,它们一路搞砸了,它们不再可读为图像(图片浏览者不会打开它们)。有什么想法为什么搞砸了?

这里是代码:

@Controller("blImageImportController")
@RequestMapping("/imageimport")
public class ImageImportController extends AdminAbstractController {

    @Value("${image.import.folder.location}")
    private String importFolderLocation;

    @Resource(name = "blStaticAssetService")
    protected StaticAssetService staticAssetService;

    @Resource(name = "blStaticAssetStorageService")
    protected StaticAssetStorageService staticAssetStorageService;

    @RequestMapping(method = {RequestMethod.GET})
    public String chooseMediaForMapKey(HttpServletRequest request,
                                       HttpServletResponse response,
                                       Model model
    ) throws Exception {
        File imageImportFolder = new File(importFolderLocation);
        if (imageImportFolder.isDirectory()) {
            Arrays.stream(imageImportFolder.listFiles()).forEach(directory ->
            {
                if (directory.isDirectory()) {
                    Arrays.stream(directory.listFiles()).forEach(this::processFile);
                }

            });
        }
        return "";
    }

    private void processFile(File file) {
        FileInputStream fis = null;
        try {
            HashMap properties = new HashMap();
            properties.put("entityType", "product");
            properties.put("entityId", file.getParentFile().getName());
            fis = new FileInputStream(file);
            StaticAsset staticAsset = this.staticAssetService.createStaticAsset(fis, file.getName(), file.length(), properties);
            this.staticAssetStorageService.createStaticAssetStorage(fis, staticAsset);
            fis.close();
        } catch (Exception e) {

        } finally {
            try {
                if (fis != null)
                    fis.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }


}

1 个答案:

答案 0 :(得分:0)

StaticAssetService进行检查,尝试将其检测为图像(请参阅https://github.com/BroadleafCommerce/BroadleafCommerce/blob/b55848f/admin/broadleaf-contentmanagement-module/src/main/java/org/broadleafcommerce/cms/file/service/StaticAssetServiceImpl.java#L217-L220)。如果它检测到这一点,您应该在结果中返回ImageStaticAssetImpl

另一方面是实际读取文件的控制器(呈现StaticAssetViewController的{​​{1}})。 StaticAssetView执行的操作之一是为浏览器用于呈现的StaticAssetView设置响应标头。这是由mimeTypehttps://github.com/BroadleafCommerce/BroadleafCommerce/blob/b55848f837f26022a620f0c2c143eed7902ba3f1/admin/broadleaf-contentmanagement-module/src/main/java/org/broadleafcommerce/cms/file/service/StaticAssetStorageServiceImpl.java#L213中的这一部分设定的。我怀疑这是你问题的根源。

另外只是一个注释,当您自己上传文件时,不需要发送这些属性。当您为特定实体(如产品或类别)上传图像时,主要用于管理员。