有没有办法从JSF支持bean动作方法提供文件下载?我尝试过很多东西.主要问题是我无法弄清楚如何获取OutputStream响应以便将文件内容写入.我知道如何使用a Servlet,但这不能从JSF表单调用,需要新的请求.
如何OutputStream从当前获得响应FacesContext?
我在JSF上传文件.我正在使用Tomahawk <t:inputFileUpload>,但同样的问题适用于例如PrimeFaces <p:fileUpload>和JSF 2.2 <h:inputFile>.
我有以下支持bean代码:
private UploadedFile uploadedFile; // +getter+setter
public String save() throws IOException {
String name = uploadedFile.getName();
System.out.println("File name: " + name);
String type = uploadedFile.getContentType();
System.out.println("File type: " + type);
long size = uploadedFile.getSize();
System.out.println("File size: " + size);
InputStream stream = uploadedFile.getInputStream();
byte[] buffer = new byte[(int) size];
stream.read(buffer, 0, (int) size);
stream.close();
}
Run Code Online (Sandbox Code Playgroud)
我能够获取文件名,类型和大小,但我无法将此文件保存在特定路径中.我无法找出保存上传文件的正确方法.我怎样才能做到这一点?
我正在使用PrimeFaces v3.5使用Firefox浏览器在我的Windows机器上传文件.event.getFile().getFileName()返回带有完整路径的文件名,这会导致进一步的问题.PrimeFaces内部正在使用Apache公共资源.我检查了javadoc但是没有帮助我了.
为了克服这个问题,我修改了程序,有点像以下方式 -
String fileName = event.getFile().getFileName();
fileName = fileName.substring(fileName.lastIndexOf("\\"));
Run Code Online (Sandbox Code Playgroud)
但它不稳健可靠.有什么建议吗?