锁定老帖子 主题:三种上传组件的使用与ajax上传
精华帖 (1) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-06
本篇文章我们来看一下知名的三种上传组件(commons-fileupload , Oreilly COS , SmartUpload)的使用 , 外加一个ajax上传的例子(commons-fileupload) , 我在附件中添加的jar包都解决了中文上传问题 , 我费了老些劲在网上下的。
其中commons-fileupload控制上传的代码如下(页面编码设置为utf-8格式): request.setCharacterEncoding("utf-8"); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> list = upload.parseRequest(request); for (int i = 0; i < list.size(); i++) { FileItem fileItem = list.get(i); String name = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1); request.getSession().setAttribute(name, true); fileItem.write(new File("d:/upload/" + name)); } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } 其中Oreilly COS控制上传的代码如下(页面编码格式设置成utf-8格式) request.setCharacterEncoding("utf-8"); MultipartRequest mr = new MultipartRequest(request , "d:/upload/" , 100000000 , "utf-8"); Enumeration fileNames = mr.getFileNames(); while(fileNames.hasMoreElements()) { String fileName = (String) fileNames.nextElement(); File file = mr.getFile(fileName); if(file != null) { String filesystemName = mr.getFilesystemName(fileName); System.out.println(filesystemName + "成功上传 "); } } 其中SmartUpload控制上传的代码如下(页面编码设置为utf-8格式) request.setCharacterEncoding("utf-8"); SmartUpload su = new SmartUpload(); su.initialize(pageContext); su.upload("utf-8"); int count = su.save("/upload"); out.println(count + "个文件上传成功"); 所有的jar包都在附件中,大家可以下载。
我做了一个模仿javaeye上传的例子,不是很好 , 大家可以看下 , 工程在附件中。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-07
最后修改:2009-07-07
楼主辛苦了,三种文件上传组件我都用过,还是觉得cos最好用commons-fileupload的次之,最后一个就不说出来了。你的代码我下回去参考一下,谢谢。
另外我还帖一个cos的重命名的 int maxPostSize =3 * 100 * 1024 * 1024; FileRename rename=new FileRename(); //FileRename1 unknowname=new FileRename1(); //response的编码为"utf-8",同时采用相应的命名策略(我用了自己的实现方法)冲突解决策略,实现上传 // MultipartRequest multi = new MultipartRequest(request, realPath, maxPostSize,"utf-8",rename,unknowname,allowFile,denyFile); MultipartRequest multi = new MultipartRequest(request, realPath,maxPostSize,"utf-8",rename); |
|
返回顶楼 | |
发表时间:2009-07-07
有没有进度显示的功能啊
|
|
返回顶楼 | |
发表时间:2009-07-08
总结的不错,评个良好
|
|
返回顶楼 | |
发表时间:2009-07-08
一致不知道如何用javascript上传文件,总感觉不太可能,因为xmlhttprequest只提供一个发送字符串的接口,并且好像dom里没有方法从File控件中将文件读成字节流,并且javascript里好像没有byte[]或者inputstream对应的数据结构,想不刷新页面如何提交文件?
|
|
返回顶楼 | |
发表时间:2009-07-10
其实我们所说的ajax上传都是通过在网页内添加一个iframe实现的 , 你仔细看就会发现 , 实际的链接栏刷新了, 只不过本身的页面的内容没有改变 , 上传是在那个隐藏的iframe里进行的 。不过最近发现优酷网上的上传真正的实现了ajax ,不知道是怎么做的 , 期待中。
|
|
返回顶楼 | |
发表时间:2009-07-14
List<FileItem> list = upload.parseRequest(request);
for (int i = 0; i < list.size(); i++) 楼主,你的这两句为什么我写的时候,在debug时list.size()==0,这样就没法上传文件了,能给我说明下么? |
|
返回顶楼 | |
发表时间:2009-07-15
shuaigg.babysky 写道 其实我们所说的ajax上传都是通过在网页内添加一个iframe实现的 , 你仔细看就会发现 , 实际的链接栏刷新了, 只不过本身的页面的内容没有改变 , 上传是在那个隐藏的iframe里进行的 。不过最近发现优酷网上的上传真正的实现了ajax ,不知道是怎么做的 , 期待中。
ajax本身不支持TCP长连接,如果部刷新页面局部上传文件,我恐怕需要用户安装activex控件了 |
|
返回顶楼 | |
发表时间:2009-07-15
进度条的话可以用flash+js来做,比如开心网的那个网盘
|
|
返回顶楼 | |
发表时间:2009-07-15
edokeh 写道 进度条的话可以用flash+js来做,比如开心网的那个网盘 这个只是个模拟进度条,个人感觉如果只是模拟进度条可以很简单的实现,等服务器端返回成功后才到100%就可以了,实时进度条目前好像还没有很好的解决办法,除非用OCX!
|
|
返回顶楼 | |