Primefaces event.getFile()。getContents()为null

时间:2017-06-08 02:49:09

标签: primefaces

我在项目Fileupload事件中使用PrimeFaces 5.1将getContents设为null。

的web.xml

<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

upload.xhtml

<p:fileUpload id="leftFileUploadId" 
fileUploadListener="#{user.ImageButton}" mode="advanced"  
allowTypes="/(\.|\/)(jpe?g|png)$/i" fileLimit="1" update="mainPanel">
</p:fileUpload>

FileUpload.java

public String ImageButton(FileUploadEvent event)
{
logger.trace("Event : "+event);
logger.trace("Event getFile : "+event.getFile());
logger.trace("File Name : "+event.getFile().getFileName());
logger.trace("Content Type :"+event.getFile().getContentType());
byte[] contents = event.getFile().getContents();
logger.trace("Fiel upload contents : "+contents);
byte[] encodeBase64 = Base64.encodeBase64(contents);
}

结果

Event getFile : org.primefaces.model.NativeUploadedFile@35f44253
File Name : 1.jpg
Content Type :image/jpeg
Fiel upload contents : null

我的疑问是为什么event.getFile()。getContents()为null。

1 个答案:

答案 0 :(得分:0)

5.1我遇到了同样的问题。 看完NativeUploadedFile的源代码之后我看到了这个: 版本5.1

public byte[] getContents() {
    return null;
}

版本5.2

public byte[] getContents() {
    if (cachedContent != null) {
        return cachedContent;
    }

    InputStream input = null;
    try {
        input = getInputstream();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];

        int n = 0;
        while (-1 != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
        }
        cachedContent = output.toByteArray();
    }
    catch (IOException ex) {
        cachedContent = null;
        throw new FacesException(ex);
    }
    finally {
        if (input != null) {
            try {
                input.close();
            }
            catch (IOException ex) {
            }
        }
    }

    return cachedContent;
}

换句话说,使用5.2或以上。我不知道为什么会这样改变!!