swfupload对做过上传文件的朋友来说,应该都了解一点,现在像126、qq邮箱等都是采用swfupload,带进度条,多文件同时上传。。。。。。优点太多了。前一段时间也做了一个月的jquery,做的就是上传,今天花了2个多小时整理了一下,做了个demo,下面把代码贴出来。打包文件就提供下载了 ,有需要的可以留下邮箱。
先上个效果吧:前台页面
文件夹:
大家可能也注意到了 名字都改了,这是自己设定的一套命名机制,以防文件文件名相同。
项目结构:
FileUploadServlet:用来处理上传文件的类
DeleteFileServlet:删除文件的
主角是swfupload,里面共有三个文件,一个上传用的swf,一个主js,还有一个handlers.js里面写了很多早做的方法,文件传到upload/mail下面,比如今天是4月30号,那么你上传的文件就会在:upload/mail/2011/04/30/文件名
index.jsp,用来显示的页面
index.jsp:
- <script type="text/javascript" src="swfupload/swfupload.js"></script>
- <script type="text/javascript" src="swfupload/handlers.js"></script>
- <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
- <script type="text/javascript">
- var swfu;
- window.onload = function () {
- swfu = new SWFUpload({
- upload_url: "FileUploadServlet",//上传的servlet
- // File Upload Settings
- file_size_limit : "50 MB", // 1000MB
- file_types : "*.*",//设置可上传的类型
- file_types_description : "所有文件",
- file_upload_limit : "10",
- file_queue_error_handler : fileQueueError,//选择文件后出错
- file_dialog_complete_handler : fileDialogComplete,//选择好文件后提交
- file_queued_handler : fileQueued,
- upload_progress_handler : uploadProgress,
- upload_error_handler : uploadError,
- upload_success_handler : uploadSuccess,
- upload_complete_handler : uploadComplete,
- // Button Settings
- button_image_url : "images/SmallSpyGlassWithTransperancy_17x18.png",
- button_placeholder_id : "spanButtonPlaceholder",
- button_width: 100,
- button_height: 18,
- button_text : '<span class="button">添加附件</span>',
- button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }',
- button_text_top_padding: 0,
- button_text_left_padding: 18,
- button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
- button_cursor: SWFUpload.CURSOR.HAND,
- // Flash Settings
- flash_url : "swfupload/swfupload.swf",
- custom_settings : {
- upload_target : "divFileProgressContainer"
- },
- // Debug Settings
- debug: false //是否显示调试窗口
- });
- };
- function startUploadFile(){
- swfu.startUpload();
- }
- </script>
- <!-- 上边定义的ID -->
- <span id="spanButtonPlaceholder"></span>
- <div id="divFileProgressContainer" style="width:200;display:none;"></div>
- <div id="thumbnails">
- <table id="infoTable" border="0" width="50%" style="border: solid 1px #7FAAFF; background-color: #C5D9FF; padding: 2px;margin-top:8px;">
- </table>
- </div>
- HttpSession session = request.getSession();
- //文件保存位置,当前项目下的upload/mail
- String uploadDir = "upload" + File.separatorChar + "mail" + File.separatorChar;
- //每天上传的文件根据日期存放在不同的文件夹
- String autoCreatedDateDirByParttern = "yyyy" + File.separatorChar + "MM" + File.separatorChar + "dd"
- + File.separatorChar;
- //按照设定的日期方式格式化日期
- String autoCreatedDateDir = DateFormatUtils.format(new java.util.Date(), autoCreatedDateDirByParttern);
- String ctxDir = session.getServletContext().getRealPath(String.valueOf(File.separatorChar));
- if (!ctxDir.endsWith(String.valueOf(File.separatorChar))) {
- ctxDir = ctxDir + File.separatorChar;
- }
- //创建文件夹
- File savePath = new File(ctxDir + uploadDir + autoCreatedDateDir);
- if (!savePath.exists()) {
- savePath.mkdirs();
- }
- System.out.println(savePath.getName()+"======");
- String saveDirectory = ctxDir + uploadDir + autoCreatedDateDir;
- if (StringUtils.isBlank(this.fileSizeLimit.toString())) {
- this.fileSizeLimit = "80";// 默认100M
- }
- int maxPostSize = Integer.parseInt(this.fileSizeLimit) * 1024 * 1024;
- String encoding = "UTF-8";
- //下面这个就是重命名的类
- FileRenamePolicy rename = new MyFileRenamePolicy();
- MultipartRequest multi = null;
- try {
- multi = new MultipartRequest(request, saveDirectory, maxPostSize, encoding, rename);
- System.out.println(oldFile.getName()+"==================");
- } catch (IOException e) {
- e.printStackTrace();
- return;
- }
- class MyFileRenamePolicy implements FileRenamePolicy {
- public File rename(File file) {
- oldFile = file;
- String fileSaveName = StringUtils.join(new String[] { java.util.UUID.randomUUID().toString(), ".",
- FilenameUtils.getExtension(file.getName()) });
- File result = new File(file.getParentFile(), fileSaveName);
- return result;
- }
- }
OK,至此上传全部完成了