java – Liferay DLFileEntry图像转换未完全转换图像

我正在使用以下代码将图像作为DLFileEntry从JPG转换为PNG格式.

    try {
        DLFileEntry dlFileEntry = DLFileEntryServiceUtil.getFileEntry(dlFileEntryId);
        InputStream inputStream = dlFileEntry.getContentStream();

        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        buffer.flush();
        byte[] byteArray = buffer.toByteArray();

        ImageBag imageBag = ImageToolUtil.read(byteArray);
        RenderedImage renderedImage = imageBag.getRenderedImage();
        if (renderedImage == null) {
            throw new IOException("Unable to decode image");
        }

        renderedImage = ImageToolUtil.scale(renderedImage, 2000);

        buffer = new ByteArrayOutputStream();
        ImageIO.write(renderedImage, "png", buffer); 
        InputStream fis = new ByteArrayInputStream(buffer.toByteArray());

        DLAppServiceUtil.updateFileEntry(
                dlFileEntry.getFileEntryId(),
                dlFileEntry.getName(),
                MediaType.IMAGE_PNG_VALUE,
                dlFileEntry.getTitle(),
                dlFileEntry.getDescription(),
                "",
                true,
                fis,
                buffer.size(),
                serviceContext);

    } catch (Exception e) {
        e.printStackTrace();
    } 

即使它更新了“文档和媒体”中的图像内容类型和扩展名,当我们尝试下载图像时,它仍然是JPG格式.

《java – Liferay DLFileEntry图像转换未完全转换图像》

图像在文档和媒体中如上所示.您可以看到内容类型已成为image / png.

《java – Liferay DLFileEntry图像转换未完全转换图像》

上面显示了我尝试下载此图像并保存时的屏幕截图.当我尝试下载时,它仍然是JPG的原始格式.除了上面的代码,我还应该怎么做,以便将图像完全转换为PNG?

最佳答案 您仍然存储旧文件名:dlFileEntry.getName()

我猜想jpeg或jpg是旧文件名的扩展名,浏览器会从扩展名中确定他的文件过滤器.

所以更好地交换扩展:

DLAppServiceUtil.updateFileEntry(
    dlFileEntry.getFileEntryId(),
    dlFileEntry.getName().replaceAll("\\..*?$",".png"),
    ...

这将更改为该文件存储的扩展名

点赞