Jsf 如何获取文件上载到的路径并将其打印出来
我正在使用primefaces进行文件上载,我想找到文件上载到的位置,然后在控制台或网页中打印出来,我如何才能做到这一点 我知道如何调用我使用的位置:Jsf 如何获取文件上载到的路径并将其打印出来,jsf,file-upload,primefaces,Jsf,File Upload,Primefaces,我正在使用primefaces进行文件上载,我想找到文件上载到的位置,然后在控制台或网页中打印出来,我如何才能做到这一点 我知道如何调用我使用的位置: #{user.fileText} 但我想知道确切的路径,如果可能的话,我会怎么做 我的上传过滤器: public class UploadFilter implements Filter { private int sizeThreshold = -1; private String repositoryPath; publ
#{user.fileText}
但我想知道确切的路径,如果可能的话,我会怎么做
我的上传过滤器:
public class UploadFilter implements Filter {
private int sizeThreshold = -1;
private String repositoryPath;
public void init(FilterConfig config) throws ServletException {
repositoryPath = config.getInitParameter(
"com.corejsf.UploadFilter.repositoryPath");
try {
String paramValue = config.getInitParameter(
"com.corejsf.UploadFilter.sizeThreshold");
if (paramValue != null)
sizeThreshold = Integer.parseInt(paramValue);
}
catch (NumberFormatException ex) {
ServletException servletEx = new ServletException();
servletEx.initCause(ex);
throw servletEx;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (!(request instanceof HttpServletRequest)) {
chain.doFilter(request, response);
return;
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
boolean isMultipartContent
= ServletFileUpload.isMultipartContent(httpRequest);
if (!isMultipartContent) {
chain.doFilter(request, response);
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
if (sizeThreshold >= 0)
factory.setSizeThreshold(sizeThreshold);
if (repositoryPath != null)
factory.setRepository(new File(repositoryPath));
ServletFileUpload upload = new ServletFileUpload(factory);
try {
@SuppressWarnings("unchecked") List<FileItem> items
= (List<FileItem>) upload.parseRequest(httpRequest);
final Map<String, String[]> map = new HashMap<String, String[]>();
for (FileItem item : items) {
String str = item.getString();
if (item.isFormField())
map.put(item.getFieldName(), new String[] { str });
else
httpRequest.setAttribute(item.getFieldName(), item);
}
chain.doFilter(new
HttpServletRequestWrapper(httpRequest) {
public Map<String, String[]> getParameterMap() {
return map;
}
public String[] getParameterValues(String name) {
Map<String, String[]> map = getParameterMap();
return (String[]) map.get(name);
}
public String getParameter(String name) {
String[] params = getParameterValues(name);
if (params == null) return null;
return params[0];
}
public Enumeration<String> getParameterNames() {
Map<String, String[]> map = getParameterMap();
return Collections.enumeration(map.keySet());
}
}, response);
} catch (FileUploadException ex) {
ServletException servletEx = new ServletException();
servletEx.initCause(ex);
throw servletEx;
}
}
}
public类UploadFilter实现过滤器{
私有int-sizeThreshold=-1;
私有字符串存储路径;
public void init(FilterConfig config)抛出ServletException{
repositoryPath=config.getInitParameter(
“com.corejsf.UploadFilter.repositoryPath”);
试一试{
字符串paramValue=config.getInitParameter(
“com.corejsf.UploadFilter.sizeThreshold”);
if(paramValue!=null)
sizeThreshold=Integer.parseInt(paramValue);
}
捕获(NumberFormatException ex){
ServletException servletEx=新的ServletException();
servletEx.initCause(ex);
抛出servletEx;
}
}
公共空间销毁(){
}
公共无效doFilter(ServletRequest请求,
ServletResponse响应,FilterChain链)
抛出IOException、ServletException{
if(!(HttpServletRequest的请求实例)){
链式过滤器(请求、响应);
返回;
}
HttpServletRequest httpRequest=(HttpServletRequest)请求;
布尔isMultipartContent
=ServletFileUpload.isMultipartContent(httpRequest);
如果(!isMultipartContent){
链式过滤器(请求、响应);
返回;
}
DiskFileItemFactory=新的DiskFileItemFactory();
如果(sizeThreshold>=0)
factory.setSizeThreshold(sizeThreshold);
if(repositoryPath!=null)
setRepository(新文件(repositoryPath));
ServletFileUpload upload=新的ServletFileUpload(工厂);
试一试{
@SuppressWarnings(“未选中”)列表项
=(列表)upload.parseRequest(httpRequest);
final Map=new HashMap();
用于(文件项:项){
String str=item.getString();
if(item.isFormField())
put(item.getFieldName(),新字符串[]{str});
其他的
httpRequest.setAttribute(item.getFieldName(),item);
}
链式过滤器(新)
HttpServletRequestWrapper(httpRequest){
公共映射getParameterMap(){
返回图;
}
公共字符串[]getParameterValues(字符串名称){
Map Map=getParameterMap();
return(String[])map.get(name);
}
公共字符串getParameter(字符串名称){
字符串[]params=getParameterValues(名称);
if(params==null)返回null;
返回参数[0];
}
公共枚举getParameterNames(){
Map Map=getParameterMap();
返回Collections.enumeration(map.keySet());
}
},回应);
}catch(FileUploadException-ex){
ServletException servletEx=新的ServletException();
servletEx.initCause(ex);
抛出servletEx;
}
}
}
使用
时,您根本不应该使用自定义筛选器。到目前为止,您显示的自定义筛选器根本无法与
组件正确交互。您应该使用PrimeFaces本身提供的过滤器。它是哪一个以及如何使用它在它的。因此,除了其他过滤器外,您还需要:
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
PrimeFaces文件上载筛选器
Facesservlet
至于保存位置,这完全由您自己控制。只需通过UploadedFile#getInputStream()
获取bean(action)侦听器方法中的文件内容,并将其写入您选择的位置
您不应该对PrimeFaces“隐藏”存储它的位置感兴趣,即当文件大于配置的阈值缓冲区大小时,它是一个临时位置(因此将每隔一段时间自动清理/删除)
另见: