首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传后更新graphicImage

上传后更新graphicImage
EN

Stack Overflow用户
提问于 2014-03-17 18:20:36
回答 3查看 1.6K关注 0票数 0

我想更新一个graphicImage后,一个新的配置文件图像已经上传。

代码语言:javascript
复制
<h:panelGroup id="profileImage" layout="block">
                <p:graphicImage id="myImage" cache="false" value="#{myProfile.usersProfileImage}" />    
                <p:fileUpload fileUploadListener="#{myProfile.fileUploadListener}"
                    mode="advanced" auto="true" sizeLimit="100000"
                    update="profileImage"
                    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
                <pe:imageAreaSelect id="imageCropper" for="myImage" hide="false"
                    imageHeight="250" imageWidth="250" aspectRatio="1:1">
                    <p:ajax event="selectEnd"
                        listener="#{myProfile.selectEndListener}" />
                </pe:imageAreaSelect>
            </h:panelGroup>

在我的后盾豆里

代码语言:javascript
复制
public void fileUploadListener(FileUploadEvent event) {

        try {
            BufferedImage image = ImageIO
                    .read(event.getFile().getInputstream());
            if (image != null) {
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                ImageIO.write(image, "jpg", outputStream);
                user.setProfileJpegImage(outputStream.toByteArray());
            } else {
                throw new IOException("FAILED TO CONVERT PICTURE");
            }
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

我不知道为什么,但是图片没有更新。如果我用f5刷新页面,图像就会更新。我也试着用update="myImage“,但两者都不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-17 18:26:51

在PrimeFaces论坛上讨论了很多次。这是一个bug,在精英版和升级5.0版中都是固定的

票数 2
EN

Stack Overflow用户

发布于 2014-03-27 10:44:56

目前还没有修复此错误的方法,但存在一些解决办法。还请参见这条线。这个线程中的变通方法,即通过Javascript或通过后台bean向图像src属性添加一个随机参数。这迫使浏览器重新加载图像。

如果使用的是fileUpload,那么将JS插入到oncomplete属性中。

票数 1
EN

Stack Overflow用户

发布于 2018-08-17 21:22:41

我在这个问题上输了很多次,所以我决定彻底改变我处理这一切的方式。我使用AWS S3文件系统来托管我的图像。我把它上传到那里,并将originalFileName、MimeType、newFileName、bucketName等信息保存在数据库中。每个文件都有一个数据库对象。我上传它没有问题。上传文件后,我强制重定向更新文件:

代码语言:javascript
复制
NavigationHandler handler = FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
handler.handleNavigation(FacesContext.getCurrentInstance(), null, "/dashboard?faces-redirect=true");
FacesContext.getCurrentInstance().renderResponse();

我以下列方式查看该文件:

代码语言:javascript
复制
<p:graphicImage value="#{userImageFileBean.endereco}"
                                    title="#{userImageFileBean.userImageFile.title}" 
                                    alt="#{userImageFileBean.userImageFile.alt}" 
                                    />

userImageFileBean endereco方法返回一个带有文件S3地址的字符串。S3桶应该有一个只读策略。如果您构建的地址只使用ids和其他常用单词,任何人都可以下载您的所有文件。为了解决这类问题,您可以基于UUID创建地址和名称文件,这是很难发现的。我希望我能帮你解决这个问题,让我在床上躺了两个星期。

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

https://stackoverflow.com/questions/22462253

复制
相关文章

相似问题

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