primefaces 文件上传下载的配置
结合了几篇外国友人的帖子和primefaces文档:
一、上传
1、在web.xml中添加
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>auto|native</param-value>
</context-param>
本人亲测commons不可用,就算加入filter
2.1 简单方式上传
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{fileBean.file}" mode="simple" />
<p:commandButton value="Submit" ajax="false"/>
</h:form>
这个是针对mode=simple的上传方案,如果mode=advanced,去掉enctype="multipart/form-data"不然界面会出现错误
这里,commandButton的ajax必须是false
2.2 高级方式上传
<p:panelGrid columns="2">
<h:outputLabel for="image" value="Select Image: *" />
<p:fileUpload fileUploadListener="#{productBean.handleFileUploadx}" mode="advanced" label="选择文件" uploadLabel="点此上传" cancelLabel="取消" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>
<f:facet name="footer">
<p:commandButton value="Submit" >
<f:ajax render="testimg"/>
</p:commandButton>
</f:facet>
</p:panelGrid>
3、得到byte[]
前台
<p:graphicImage id="testimg" value="#{productBean.image}" width="50" height="50" style="">
</p:graphicImage>
后台
private StreamedContent image;
get
set
public void handleFileUploadx(FileUploadEvent event) {
UploadedFile f=event.getFile();
setFile( event.getFile());
try {
InputStream stream;
stream = file.getInputstream();
byte[] bt=IOUtils.toByteArray(stream);
ByteArrayInputStream img=new ByteArrayInputStream(bt);
setImage( new DefaultStreamedContent(img,"image/jpg"));
} catch (IOException ex) {
Logger.getLogger(ProductBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
这里 IOUtils是Apache的common-io在本人的资源中提供下载,当然,得到字节流之后你可以把它存入数据库,需要的时候在取出来,我这里只是展示了上传完文件之后显示上传文件的功能。
如果你想把上传的file保存成文件
InputStream stream=file.getInputstream();
FileOutputStream fos=new FileOutputStream(new File("/dd.jpg"));
int read=0;
byte[] bytes=new byte[1024];
while((read=stream.read(bytes))!=-1)
{
fos.write(bytes,0,read);
}
二、下载
前台
<p:commandLink value="Download" ajax="false">
<p:fileDownload value="#{fileBean.downfile}"/>
</p:commandLink>
后台
初始化的时候
InputStream stream = this.getClass().getResourceAsStream("./ok.png");
setDownfile(new DefaultStreamedContent(stream, "image/jpeg","dx.jpg"));
这样,就可以把上传资源以二进制的方式存入数据库,需要下载的时候,在从数据库中取出以提供下载。
三、实体类的二进制表示
@Lob
private byte[] file;
set
get
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。