我知道如何使用 Primefaces 或使用 Tomahawk 进行文件上传,但是,我正在尝试使用 Apache Commons FileUpload 进行文件上传,到目前为止我遇到了一些障碍。即使我的表单使用multipart/form-data
,当我提交表单时,内容类型也变为application/x-www-form-urlencoded
. 这是我的代码
<h:body>
<h:form enctype="multipart/form-data">
Upload File
<input type="file" name="file"/>
<p:commandButton value="Submit" action="#{viewBean.submit}"/>
</h:form>
</h:body>
这是我的ViewBean
@ManagedBean
@ViewScoped
public class ViewBean implements Serializable {
public void submit() {
String url = "/FileUploadServlet";
FacesContext context = FacesContext.getCurrentInstance();
try {
String contentType = context.getExternalContext().getRequestContentType();
context.getExternalContext().dispatch(url);
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception when calling Servlet", e);
} finally {
context.responseComplete();
}
}
}
所以当我尝试打印上面的内容类型时,它显示了application/x-www-form-urlencoded
. 如果我放入ajax="false"
my p:commandButton
,则该submit()
方法甚至不会被调用,但如果我取出enctype="multipart/form-data"
(仍然保持ajax="false"
),submit()
则被调用但它不是 multipart,它是application/x-www-form-urlencoded
,所以 apache commons fileupload 抛出异常,因为它不是 multipart。似乎无论我做什么,我似乎都无法获得多部分请求。请帮忙