日期:2014-05-20  浏览次数:20655 次

commons-fileupload 可以不可以在上传文件之前取得form中参数的值?
commons-fileupload 可以不可以在上传文件之前取得form中参数的值?
<form enctype="multipart/form-data" ...> 这个设置, 好像不可以. 
原来用smartupload可以, 但是不能传大文件所以改用这个. 
问题就来了. 我想在客户端指定上传的目录, 比如/data/0222 或 /data/abc, 
所以要在上传之前检查下用户对目录的权限(不是操作系统权限).
所以要在上传之前得到form中的一些信息

还有个问题请教, 如果是传个几百MB的大文件, 我看是先传到临时目录, 再移动到其他目录, 这个很耗资源, 也很花时间啊 :( 

有什么办法吗? 或是我的需求达不到.

------解决方案--------------------
smartload可以设置参数啊,设置上传文件的大小
------解决方案--------------------
想了一下,觉得这么可以..如果有其他方法,这里学习了. 
弄一个中间页,就是你提交的时候先到这个页面,然后判断,如果符合你的条件,用javascript代码(javascript:history.back(),这个相当于后退,页面不会刷新)返回上传附件的页面上传.如果在中间页判断出不符合条件就直接在中间页报错,这样就可以避免楼主所说的现象. 
我这么说不知道楼主名不明白,个人感觉可以.
------解决方案--------------------
这个东西在smartupload中是可以取得参数的,在fileupload不行。但是把参数写在url(url?a=5 可以取到)也就是使用http的GET方法是可以上传的。可以在上载前,先从request中取出来,试试看。
------解决方案--------------------
使用过滤器(filter)完全可以实现,其方法是:定义一个过滤器类,这个类需要实现javax.servlet.Filter接口,Filter接口中需要实现3个方法:
public class TestFilter implements Filter {

public void init(FilterConfig filterConfig) throws ServletException {

}
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws 
IOException, ServletException {
}
}
这3个方法分别在web容器(象tomcat)启动时、满足条件时和运用停止时被web容器调用,需要使用过滤器,需要在web.xml文件中进行配置:
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>包.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/web路径/FileUpload</url-pattern>
</filter-mapping>
经过配置后,当客户端访问>/web路径/FileUpload这个servlet时,将执行TestFilter这个过滤器的doFilter方法,这个方法有3个参数,这3个参数是由web容器注入的,前两个不用说,用他们就可以完成搂主的判断及不满足条件时的重定向,第3个在过滤通过时用来调用下个过滤器(可配置多个),也就是在doFilter的末尾写上这么一句:chain.doFilter(request, response);