How to configure and多难点击<p:fileUpload>
取决于总理法文本和共同财产法文本。
All PrimeFaces versions
下面的要求适用于所有总理版本:
The enctype
attribute of the <h:form>
needs to be set to multipart/form-data
. When this is absent, the ajax upload may just work, but the general browser behavior is unspecified and dependent on form composition and webbrowser make/version. Just always specify it to be on the safe side.
在使用<代码>mode=“预付”(即Ajax上载荷,这是缺省)时,确保你在(主管)模板中填写<代码><h:head>。 这将确保适当列入必要的 Java文本。 <代码>mode=“simple” (non-ajax upload)并不要求这样做,但这将打破所有其他总理的感觉和功能,因此你不想错过。
在使用<条码>mode=“simple”(即非jax upload)时,Ajax必须按<条码>jax=“false”在任何总理指挥所/联系上致残,并且必须使用<条码><p:fileUpload> with <p:commandButton action>
,而不是<p:file: 有效载荷听众;
。
因此,如果你想要(auto)在亚克斯支援下卸载(见<h:head>
!):
<h:form enctype="multipart/form-data">
<p:fileUpload listener="#{bean.upload}" auto="true" /> // For PrimeFaces version older than 8.x this should be fileUploadListener instead of listener.
</h:form>
public void upload(FileUploadEvent event) {
UploadedFile uploadedFile = event.getFile();
String fileName = uploadedFile.getFileName();
String contentType = uploadedFile.getContentType();
byte[] contents = uploadedFile.getContents(); // Or getInputStream()
// ... Save it, now!
}
或者,如果你想要卸载非杰克斯文件:
<h:form enctype="multipart/form-data">
<p:fileUpload mode="simple" value="#{bean.uploadedFile}" />
<p:commandButton value="Upload" action="#{bean.upload}" ajax="false" />
</h:form>
private transient UploadedFile uploadedFile; // +getter+setter
public void upload() {
String fileName = uploadedFile.getFileName();
String contentType = uploadedFile.getContentType();
byte[] contents = uploadedFile.getContents(); // Or getInputStream()
// ... Save it, now!
}
请注意,与麻醉相关的特性,例如auto
、allowTypes
、onstart
、>oncomplete
、oncomplete
等,均载于mode="simple”/code>。 因此,在这种情况下,无需具体说明。
还注意到<代码>上载File 财产被宣布为transient
,仅是为了使人们认识到这绝对不是序列性的。 整个事项应当放在请求范围很广的床上,而不是放在观点上,甚至放在会议范围上。 如果是这样的话,那么你可以安全地删除<条码>中途<>>。
并请注意,您应在上述方法内,而不是在以后的吉大港山区请求中采用的一种不同的信条,直接阅读和保存文件内容。 这是因为,从技术上讲,上载的档案内容要求范围很广,因此无法在以后/不同的吉大港山区管理局的请求中查阅。 在随后的请求中读到该文本的任何尝试都很可能在临时档案中以<代码>java.io.FileNotFoundException告终,并且只会造成混乱。
PrimeFaces 8.x or newer
配置与以下5.x版本的索引相同,但如果不打电话给你的听众,则核对方法的特性是否称作listener,而不是fileUploadListener 。 同8.x之前的版本一样。
PrimeFaces 5.x
如果你至少重新使用共同基金2.2和<代码>faces-config.xml,则要求增加配置。 您确实是<>而不是 ,这完全需要由总理提交上载过滤器,而且你还需要<>tong>not > 。 UPLOADER/code> context para amount in web.xml
。 如果你不清楚如何根据使用的目标服务器适当安装和配置共同财产,则标题是。 • 如何通过Maven适当安装和配置JF图书馆?和 Installing JSF" section of we JSF wiki page.
If you re however not using JSF 2.2 yet and you can t upgrade JSF 2.0/2.1 to 2.2 yet (should be effortless though when already on a Servlet 3.0 compatible container), then you need to manually register the below PrimeFaces file upload filter in web.xml
(it will parse the multi part request and fill the regular request parameter map so that FacesServlet
can continue working as usual):
<filter>
<filter-name>primeFacesFileUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>primeFacesFileUploadFilter</filter-name>
<servlet-name>facesServlet</servlet-name>
</filter-mapping>
The <servlet-name>
value of facesServlet
must match exactly the value in the <servlet>
entry of the javax.faces.webapp.FacesServlet
in the same web.xml
. So if it s e.g. Faces Servlet
, then you need to edit it accordingly to match.
PrimeFaces 4.x
与5.x总理相同的故事也适用于4.x。
There s only a potential problem in getting the uploaded file content by UploadedFile#getContents()
. This will return null
when native API is used instead of Apache Commons FileUpload. You need to use UploadedFile#getInputStream()
instead. See also How to insert uploaded image from p:fileUpload as BLOB in MySQL?
本土APIC的另一个潜在问题是,当上载部分以不同“正常”的jax要求被发射而没有处理上载部件时。 另见。 档案库与法国宇宙航空研究开发机构合作,在KFaces 4.0/JSF 2.2.x-javax.servlet。 ServletException: 申请内容类型不是多部分/格式数据。
这两种问题也可以通过改用阿帕奇科斯文档上载解决。 详见3.x节。
PrimeFaces 3.x
这一版本并不支持 JSF 2.2 3.0 本地文件上载。 您需要人工安装阿帕奇科斯文档上载,并在<代码>web.xml上明确登记文件上载过滤器。
你们需要以下图书馆:
这些人必须参加网络应用时间段。 在使用Maven时,确保至少可以操作时间(汇编的缺失范围也很好)。 在人工携带联合报告时,确保填写在<代码>/WEB-INF/lib上。
文档上载过滤器登记细节见上文5.x节。 如果你重新使用4+总理,你愿意明确使用阿帕奇科斯·卷宗上载,而不是使用共同财产基金。 2.2 / Servlet 3.0 home file upload, 然后,在上文提及的图书馆旁边,您也需要过滤web.xml
以下背景段:
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value><!-- Allowed values: auto, native and commons. -->
</context-param>
Troubleshooting
如果仍然没有工作,这又可能是与总理结构无关的原因:
只有当你重新使用总理府文件上载过滤器时: 在其网页上还有另一个<代码>Filter, 运行之前>, 即: 总理文件上载过滤器,并且已经通过下列方式消耗了申请机构:getParaifMap(
,getParaifMap(
),getReader(
,等等。 申请机构只能一劳永逸。 当你在文件上上载过滤器之前使用其中一种方法时,文件上载过滤器就会有一个空洞的要求机构。
为了确定这一点,你需要将文件上载过滤器的<代码><filter-mapping>上载过滤器的 <<> before<>。 http://code>web.xml。 如果请求不是<条码>多部分/格式数据代码>的要求,那么文件上载过滤器就象没有发生那样继续。 如果你使用自动添加的过滤器,因为其使用说明(例如,PrettyFaces),你可能需要通过网络xml添加明确的命令。 见。 如何根据《世界行动计划》说明确定“服务器过滤器”的执行顺序
只有当你重新使用总理府文件上载过滤器时: 在其网页上还有另一个<代码>Filter, 运行 <<<> > 以前> 提交文件上载过滤器,并进行了RequestDiquestsuper#(<>/code>。 通常,URL 螺旋式过滤器,例如PrettyFaces 。 这触发了<条码>FORWARD
的发送器,但仅通过在<条码>查询上的发送器过滤器。
为了确定这一点,你需要要么把总理文件上载过滤器上载到 <> > <> > > 发送过滤器上,要么重新配置总理文件上载过滤器,在FORWARD/code>上播放。 派遣人员也:
<filter-mapping>
<filter-name>primeFacesFileUploadFilter</filter-name>
<servlet-name>facesServlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
登有<代码><h:form>。 这种做法是不合法的,而浏览器的行为没有说明。 浏览器获得的提呈数据比以往多。 确保您不打上<代码><h:form>。 这完全不考虑<代码>enctype 。 完全不是表态。
If you re still having problems, well, debug the HTTP traffic. Open the webbrowser s developer toolset (press F12 in Chrome/Firebug23+/IE9+) and check the Net/Network section. If the HTTP part looks fine, then debug the JSF code. Put a breakpoint on FileUploadRenderer#decode()
and advance from there.
Saving uploaded file
在你最后找工作之后,你的下一个问题很可能是“我节省了上载档案吗? 最好在此继续:。 • 如何节省在JSF上的上载档案。