首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写自己的图片导入器,导入后图片不被识别为图片

编写自己的图片导入器,导入后图片不被识别为图片
EN

Stack Overflow用户
提问于 2018-04-04 14:56:18
回答 1查看 39关注 0票数 0

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

它与文件夹结构一起创建文件,文件似乎具有相同的文件大小,但不知何故,它们在创建过程中变得混乱,它们不再作为图像可读(图片浏览器不会打开它们)。你知道为什么会搞得一团糟吗?

代码如下:

代码语言:javascript
复制
@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();
            }
        }
    }


}
EN

回答 1

Stack Overflow用户

发布于 2018-04-05 10:22:12

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

另一方面是实际读取文件的控制器(呈现StaticAssetViewStaticAssetViewController )。StaticAssetView所做的一件事就是为mimeType设置一个响应头,浏览器使用该响应头来呈现。这是由StaticAssetStorageServicehttps://github.com/BroadleafCommerce/BroadleafCommerce/blob/b55848f837f26022a620f0c2c143eed7902ba3f1/admin/broadleaf-contentmanagement-module/src/main/java/org/broadleafcommerce/cms/file/service/StaticAssetStorageServiceImpl.java#L213中的这段代码设置的。我怀疑这就是你问题的根源。

另外,请注意,当您自己上传文件时,不需要发送这些属性。这主要是当你上传一个特定实体(如产品或类别)的图片时,在管理员中使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49644641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档