本人使用的是 spring+dwr+ibatis+mysql 组合
目的:不使用form,实现多文件同时上传
想法:从同一个循环取得多次文件,就是保存了文件的路径而不上传,等想要上传的图片路径全部记录完毕,并且提交其它内容生成了一个id后再同时上传和记录到数据库。
问题:现在的客户端上传文件至服务器端主要有jspsmartupload与common-fileupload,它们都需要form与组建组合使用,如果已经[color=red]知道文件的具体路径[/color],如:d:\file.jpg这样的形式,即路劲已经取得,如何使用这些组件来上传文件到服务器端?
因为使用了spring不知什么更好的方式来获取request,还有dwr实现了转js的功能,但是如果使用for循环,如果该循环多次调用了类似上传这样耗时的方法,会不会出现异常?
[b]问题补充:[/b]
谢谢layer555!不是不能使用form,而是不想使用。我查阅了Spring的CommonsMultipartResolver的资料,不是很明白,您能否给出完整明确的代码和解释?
目前就是我已经获取了多个文件的本地路径了,接下去就是如何同时上传到服务器端的问题了。
[b]问题补充:[/b]
谢谢freeman983.我并没有使用spring的mvc模式,而且这个spring我也不是非常明白,需要菜鸟式的教说,请原谅。
使用Spring的CommonsMultipartResolver应该可以满足你上传多个文件的需求啊?为什么不能使用form呢?
spring好像有WebApplicationContext,有了这个上下文你就可以获取的request了
[code="java"]WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); [/code]
spring它本身是不侵入web容器里的,它没有api去得到request,这个一般都是用dwr来取嘛
只要在dwr要调用的方法参数后面加上request参数就能得到了,
比如
class PersonDS
{
public void processInsertPerson(Person p, [color=red]final HttpServletRequest request)[/color]
{
}
}
[code="java"]
MultipartHttpServletRequest multireq = (MultipartHttpServletRequest) req;
MultipartFile mFile=null;
Map map=multireq.getFileMap();
Iterator fileNames=multireq.getFileNames();
while(fileNames.hasNext()){
mFile=(MultipartFile)map.get(fileNames.next());
if(!mFile.isEmpty())
break;
String fileName = mFile.getOriginalFilename();
//dosomething
}
[/code]
很早以前的写的.使用的是spring mvc ,处理多文件上传
研究下这个就能搞定
http://topmanopensource.iteye.com/blog/377759
想法:从同一个循环取得多次文件,就是保存了文件的路径而不上传,等想要上传的图片路径全部记录完毕,并且提交其它内容生成了一个id后再同时上传和记录到数据库。
具我所知,不通过file空间,只通过文件路径就把文件上传到服务器是无法实现的.
解决方案:通过JS动态添加多个file控件.觉得不好看,可以隐藏起来.