我正在尝试使用 HTML5 File API 分段上传文件(在发现来自 RichFaces 和 PrimeFaces 的文件上传组件不是最适合我的需要之后)。我已按照此问题中提示的步骤进行操作:
但是我需要使用 JSF 1.2 而不是 PHP,这意味着(我认为):
xhr.open("POST", "upload.xhtml");
代替
xhr.open("POST", "upload.php");
有没有办法做到这一点?我如何告诉 JSF 让文件段来处理它们?
我正在尝试使用 HTML5 File API 分段上传文件(在发现来自 RichFaces 和 PrimeFaces 的文件上传组件不是最适合我的需要之后)。我已按照此问题中提示的步骤进行操作:
但是我需要使用 JSF 1.2 而不是 PHP,这意味着(我认为):
xhr.open("POST", "upload.xhtml");
代替
xhr.open("POST", "upload.php");
有没有办法做到这一点?我如何告诉 JSF 让文件段来处理它们?
您不能向 JSF 页面提交非 JSF POST 请求。您需要为非 JSF POST 请求自制一个自定义 servlet。您可以在这个与密切相关的问题的答案中找到此类 servlet 的具体示例:HTML5 File Upload to Java Servlet。
要从 primfaces 中的 servlet 恢复上传的文件(primfaces 5 是我的版本),请使用此代码
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
FileItem fi;
try {
MultipartRequest sReq = (MultipartRequest)request;
fi = sReq.getFileItem("file");
} catch (Exception e) {
throw new ServletException("ERROR: ", e);
}
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
if(fi != null)
{
response.getWriter().write(" Fichero capturado correctamente ");
}
else
{
response.getWriter().write(" Se ha producido algún fallor ");
}
}
问题的关键是:
MultipartRequest sReq = (MultipartRequest)request;
fi = sReq.getFileItem("file");
我希望您可以使用我的解决方案。