`
shuaigg.babysky
  • 浏览: 571174 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

三种上传组件的使用与ajax上传

阅读更多

本篇文章我们来看一下知名的三种上传组件(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上传的例子,不是很好 , 大家可以看下 , 工程在附件中。

 

 

  • cos.jar (55.1 KB)
  • 下载次数: 989
分享到:
评论
17 楼 idy_it 2009-12-05  
实现一个功能容易完善不容易的,谢谢楼主的分享了
16 楼 sjbrising 2009-07-29  
学习了一下,确实很强大!!
15 楼 royzhou1985 2009-07-26  
common-fileupload结合ajax可是实现上传进度显示

common-fileupload 里面提供了一个listener来监听上传的数据 。
可以使用它来显示上传进度
http://www.matrix.org.cn/resource/article/2007-01-08/09db6d69-9ec6-11db-ab77-2bbe780ebfbf.html
14 楼 arantam 2009-07-24  
推荐common-fileupload.使用Struts2的话更简单.
13 楼 fcoffee 2009-07-17  
shuaigg.babysky 写道
其实我们所说的ajax上传都是通过在网页内添加一个iframe实现的 , 你仔细看就会发现 , 实际的链接栏刷新了, 只不过本身的页面的内容没有改变 , 上传是在那个隐藏的iframe里进行的 。不过最近发现优酷网上的上传真正的实现了ajax ,不知道是怎么做的 , 期待中。



优酷的上传是靠 flash实现的
12 楼 witcheryne 2009-07-17  
unsid 写道
一致不知道如何用javascript上传文件,总感觉不太可能,因为xmlhttprequest只提供一个发送字符串的接口,并且好像dom里没有方法从File控件中将文件读成字节流,并且javascript里好像没有byte[]或者inputstream对应的数据结构,想不刷新页面如何提交文件?

使用iframe模拟...
jQuery 有一个 AjaxFileUpload插件...
  看他源代码是用iframe模拟的ajax效果...
11 楼 lt0604 2009-07-16  
smart-upload.jar上传容易造成CPU占用的问题,最好选择commons-fileupload
10 楼 unsid 2009-07-16  
erikchang 写道
edokeh 写道
进度条的话可以用flash+js来做,比如开心网的那个网盘
这个只是个模拟进度条,个人感觉如果只是模拟进度条可以很简单的实现,等服务器端返回成功后才到100%就可以了,实时进度条目前好像还没有很好的解决办法,除非用OCX!


可以做的,但是你的任务一定要是可切分的。我的做法是这样,比如你要在服务器上运算一批数据,然后再前台监控这批数据的处理进度,并且进度每次增长都真正代表服务器运算完成。首先要保证任务可切分,比如这一批数据可以按照记录条数切分,那么你就可以写一个servlet,让它只处理一条数据的运算,然后用ajax提交请求,并提交一个标志着条数据的id ,然后本次运算有几条数据就创建几个ajax请求,并用返回的状态更新进度条。

这样做的缺点是
1、只能针对把单个任务可以切分到各个servlet的需求,如果是传一个文件就不可能作进度条了
2、一比业务占用大量线程,非常影响并发能力,我的处理方式是:在第一个ajax成功返回之后再创建第二个,这样保证统一时间只有一个线程在处理中。

9 楼 erikchang 2009-07-15  
edokeh 写道
进度条的话可以用flash+js来做,比如开心网的那个网盘
这个只是个模拟进度条,个人感觉如果只是模拟进度条可以很简单的实现,等服务器端返回成功后才到100%就可以了,实时进度条目前好像还没有很好的解决办法,除非用OCX!
8 楼 edokeh 2009-07-15  
进度条的话可以用flash+js来做,比如开心网的那个网盘
7 楼 unsid 2009-07-15  
shuaigg.babysky 写道
其实我们所说的ajax上传都是通过在网页内添加一个iframe实现的 , 你仔细看就会发现 , 实际的链接栏刷新了, 只不过本身的页面的内容没有改变 , 上传是在那个隐藏的iframe里进行的 。不过最近发现优酷网上的上传真正的实现了ajax ,不知道是怎么做的 , 期待中。


ajax本身不支持TCP长连接,如果部刷新页面局部上传文件,我恐怕需要用户安装activex控件了
6 楼 dlzjp123 2009-07-14  
List<FileItem> list = upload.parseRequest(request);  
    for (int i = 0; i < list.size(); i++)
楼主,你的这两句为什么我写的时候,在debug时list.size()==0,这样就没法上传文件了,能给我说明下么?
5 楼 shuaigg.babysky 2009-07-10  
其实我们所说的ajax上传都是通过在网页内添加一个iframe实现的 , 你仔细看就会发现 , 实际的链接栏刷新了, 只不过本身的页面的内容没有改变 , 上传是在那个隐藏的iframe里进行的 。不过最近发现优酷网上的上传真正的实现了ajax ,不知道是怎么做的 , 期待中。
4 楼 unsid 2009-07-08  
一致不知道如何用javascript上传文件,总感觉不太可能,因为xmlhttprequest只提供一个发送字符串的接口,并且好像dom里没有方法从File控件中将文件读成字节流,并且javascript里好像没有byte[]或者inputstream对应的数据结构,想不刷新页面如何提交文件?
3 楼 whatwhat 2009-07-08  
总结的不错,评个良好
2 楼 elvishehai 2009-07-07  
有没有进度显示的功能啊
1 楼 javaAK 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);


相关推荐

    asp上传大全之三ajax上传组件

    在“asp上传大全之三ajax上传组件”这个主题中,重点学习和理解的内容包括: - ASP的文件上传机制,包括`&lt;input type="file"&gt;`控件的使用,`Request`对象如何获取文件数据。 - JavaScript的XMLHttpRequest对象和...

    Ajax 文件上传组件

    Ajax 文件上传组件是一种在网页上实现异步文件上传的技术,它允许用户在不刷新整个页面的情况下,通过Ajax技术将文件发送到服务器。这种组件在现代Web应用中非常常见,能够提供更好的用户体验,尤其是在处理大量数据...

    jquery的三种ajax上传组件

    本篇文章将深入探讨jQuery中的三种Ajax上传组件,它们是实现无刷新文件上传的关键技术。 1. **jQuery Form Plugin (jquery.form.js)** `jquery.form.js` 是一个插件,扩展了jQuery的核心功能,提供了方便的Ajax...

    asp无刷新上传文件ajax上传文件 asp无组件上传类 Version 0.97

    asp无刷新上传文件ajax上传文件 请将本程序放到你的虚拟主机上运行,如果本地有iis也可以。有些同学有简易iis服务器,不适用本程序的,因为有部分中文字符不能识别导致无法运行。 如果需要上传多文件可以把index....

    ajax上传组件带进度条

    总结来说,"ajax上传组件带进度条"是通过Struts2框架和相关的第三方库实现的一种高级文件上传功能,它提升了用户在上传大文件时的体验,让用户能够实时看到文件上传的进度,从而提高应用的互动性和用户满意度。...

    html5 + ASP +Ajax 前端免刷新多文件批量上传 免组件

    标题中的“html5 + ASP +Ajax 前端免刷新多文件批量上传 免组件”表明这个技术方案是关于在Web应用中实现前端文件的批量上传,而且在整个过程中页面无需刷新,利用HTML5、ASP和Ajax技术来实现。这个过程通常涉及到几...

    asp Ajax无刷新文件上传(带进度条,无组件)

    【ASP AJAX无刷新文件上传技术详解】 在网页开发中,用户常常需要进行文件上传操作,传统的文件上传方式通常会伴随着页面的刷新,这不仅影响用户体验,也可能导致数据丢失。为了解决这一问题,ASP(Active Server ...

    js上传预览支持FF图片上传预览的ajax上传组件

    `ImagePreview.js`则是核心的JavaScript代码,包含实现预览和Ajax上传功能的逻辑。此脚本可能包括了事件监听、FileReader API的使用(对于支持的浏览器)、以及针对Firefox的替代策略等。 在`ImagePreview.js`中,...

    基于Ajax的Flash、HTML5上传组件(支持C#)

    【基于Ajax的Flash、HTML5上传组件(支持C#)】是一种先进的Web开发技术,它结合了Ajax、Flash和HTML5的优势,为用户提供了一种高效、便捷的文件上传解决方案。在传统的网页上传方式中,用户通常需要刷新整个页面...

    ASP图片上传组件 图片批量上传控件 图片上传插件

    ASP图片上传组件是一种在Web应用中用于处理用户端图片上传功能的工具,它极大地简化了开发者在ASP(Active Server Pages)环境下实现图片上传的过程。图片批量上传控件和插件则进一步增强了这种功能,允许用户一次性...

    xoxoASP无组件上传类(包括ajax,ifram框架上传,弹窗上传,混合上传)

    1. AJAX上传:AJAX允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。在ASP中,通过XMLHttpRequest对象实现异步通信,用户可以无感知地上传文件,提高了用户体验。但需要注意,由于浏览器同源策略的...

    功能强大的文件上传组件

    在实际开发中,HTML5的文件上传组件可能还会结合其他技术,如使用`FormData`封装上传数据,`XMLHttpRequest`或`fetch` API发送异步请求,以及使用`Blob`对象进行文件的切片上传和断点续传等高级功能。同时,为了提高...

    jsp中js上传组件的使用

    总之,JSP中使用JS上传组件涉及前端与后端的紧密协作,理解组件的工作原理和API,以及良好的前后端通信实践,是实现高效文件上传功能的关键。通过选择合适的组件,并结合JSP和JavaScript的特性,我们可以为用户提供...

    ajax提交form表单和上传图片

    这个插件处理了与文件上传相关的复杂性,如处理多部分/混合内容类型,使得在不离开当前页面的情况下上传文件成为可能。 `springmvc-servlet.xml` 是Spring MVC应用的核心配置文件,它定义了Spring MVC的组件,如...

    asp.net上传组件

    ASP.NET上传组件是一种用于网页应用中的技术,它允许用户在网页上方便地上传一个或多个文件。这个组件通常包括前端的交互界面和后端的处理逻辑,以实现文件的选取、上传、进度显示以及错误处理等功能。在描述中提到...

    web开发上传组件

    总之,这个基于JQuery的Web开发上传组件提供了一种简单而强大的方式来集成文件上传功能,它利用了JQuery的灵活性和易用性,使得开发者可以轻松地在项目中实现文件上传功能,提升网站或应用的功能性和用户满意度。

    ajax艾恩Ajax无刷新文件上传(带进度条,无组件)

    "无组件"意味着没有使用第三方库或插件,而是直接使用原生的HTML5 API来实现。这使得代码更简洁,依赖性更低,但可能需要处理更多的细节问题,比如跨域请求、错误处理等。 ### 5. 安全与优化 在实现Ajax文件上传时...

    struts2+jquery+ajax文件异步上传

    Struts2、jQuery和Ajax是Web开发中的三个关键组件,它们共同构成了文件异步上传的基础框架。这个项目是在MyEclipse环境下实现的一个简单的文件上传功能,让我们深入了解一下这些技术及其在文件上传中的应用。 首先...

    异步文件上传组件Uploader.zip

    Uploader是非常强大的异步文件上传组件,支持ajax、iframe、flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证、图片预览、进度条等,广泛应用于淘宝网,比如退款系统、...

    CuteWebUI无刷新上传组件

    CuteWebUI无刷新上传组件是一款高效且便捷的前端文件上传解决方案,专为提升用户体验而设计。它基于Ajax技术,实现了在不刷新整个页面的情况下进行文件上传,显著提高了网页交互的流畅性。AjaxUploader是该组件的...

Global site tag (gtag.js) - Google Analytics