jquery+swfupload+servlet 多文件上传

swfupload对做过上传文件的朋友来说,应该都了解一点,现在像126、qq邮箱等都是采用swfupload,带进度条,多文件同时上传。。。。。。优点太多了。前一段时间也做了一个月的jquery,做的就是上传,今天花了2个多小时整理了一下,做了个demo,下面把代码贴出来。打包文件就提供下载了 ,有需要的可以留下邮箱。
先上个效果吧:前台页面
QQ截图未命名.jpg 
文件夹:
QQ截图未命名.jpg 
大家可能也注意到了 名字都改了,这是自己设定的一套命名机制,以防文件文件名相同。
项目结构:
QQ截图未命名.jpg 
FileUploadServlet:用来处理上传文件的类
DeleteFileServlet:删除文件的
主角是swfupload,里面共有三个文件,一个上传用的swf,一个主js,还有一个handlers.js里面写了很多早做的方法,文件传到upload/mail下面,比如今天是4月30号,那么你上传的文件就会在:upload/mail/2011/04/30/文件名
index.jsp,用来显示的页面
index.jsp:

  1. <script type="text/javascript" src="swfupload/swfupload.js"></script>
  2. <script type="text/javascript" src="swfupload/handlers.js"></script>
  3. <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
复制代码
关键部分来了,上传:
  1. <script type="text/javascript">
  2. var swfu;
  3. window.onload = function () {
  4. swfu = new SWFUpload({
  5. upload_url: "FileUploadServlet",//上传的servlet

  6. // File Upload Settings
  7. file_size_limit : "50 MB", // 1000MB
  8. file_types : "*.*",//设置可上传的类型
  9. file_types_description : "所有文件",
  10. file_upload_limit : "10",

  11. file_queue_error_handler : fileQueueError,//选择文件后出错
  12. file_dialog_complete_handler : fileDialogComplete,//选择好文件后提交
  13. file_queued_handler : fileQueued,
  14. upload_progress_handler : uploadProgress,
  15. upload_error_handler : uploadError,
  16. upload_success_handler : uploadSuccess,
  17. upload_complete_handler : uploadComplete,

  18. // Button Settings
  19. button_image_url : "images/SmallSpyGlassWithTransperancy_17x18.png",
  20. button_placeholder_id : "spanButtonPlaceholder",
  21. button_width: 100,
  22. button_height: 18,
  23. button_text : '<span class="button">添加附件</span>',
  24. button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }',
  25. button_text_top_padding: 0,
  26. button_text_left_padding: 18,
  27. button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
  28. button_cursor: SWFUpload.CURSOR.HAND,

  29. // Flash Settings
  30. flash_url : "swfupload/swfupload.swf",

  31. custom_settings : {
  32. upload_target : "divFileProgressContainer"
  33. },
  34. // Debug Settings
  35. debug: false //是否显示调试窗口
  36. });
  37. };
  38. function startUploadFile(){
  39. swfu.startUpload();
  40. }

  41. </script>
复制代码
显示上传按钮:
  1. <!-- 上边定义的ID -->
  2. <span id="spanButtonPlaceholder"></span>
  3. <div id="divFileProgressContainer" style="width:200;display:none;"></div>
  4. <div id="thumbnails">
  5. <table id="infoTable" border="0" width="50%" style="border: solid 1px #7FAAFF; background-color: #C5D9FF; padding: 2px;margin-top:8px;">
  6. </table>
  7. </div>
复制代码
这是FileUploadServlet里面上传的代码:
  1. HttpSession session = request.getSession();
  2. //文件保存位置,当前项目下的upload/mail
  3. String uploadDir = "upload" + File.separatorChar + "mail" + File.separatorChar;
  4. //每天上传的文件根据日期存放在不同的文件夹
  5. String autoCreatedDateDirByParttern = "yyyy" + File.separatorChar + "MM" + File.separatorChar + "dd"
  6. + File.separatorChar;
  7. //按照设定的日期方式格式化日期
  8. String autoCreatedDateDir = DateFormatUtils.format(new java.util.Date(), autoCreatedDateDirByParttern);
  9. String ctxDir = session.getServletContext().getRealPath(String.valueOf(File.separatorChar));
  10. if (!ctxDir.endsWith(String.valueOf(File.separatorChar))) {
  11. ctxDir = ctxDir + File.separatorChar;
  12. }
  13. //创建文件夹
  14. File savePath = new File(ctxDir + uploadDir + autoCreatedDateDir);
  15. if (!savePath.exists()) {
  16. savePath.mkdirs();
  17. }
  18. System.out.println(savePath.getName()+"======");
  19. String saveDirectory = ctxDir + uploadDir + autoCreatedDateDir;

  20. if (StringUtils.isBlank(this.fileSizeLimit.toString())) {
  21. this.fileSizeLimit = "80";// 默认100M
  22. }
  23. int maxPostSize = Integer.parseInt(this.fileSizeLimit) * 1024 * 1024;
  24. String encoding = "UTF-8";
  25. //下面这个就是重命名的类
  26. FileRenamePolicy rename = new MyFileRenamePolicy();
  27. MultipartRequest multi = null;
  28. try {
  29. multi = new MultipartRequest(request, saveDirectory, maxPostSize, encoding, rename);
  30. System.out.println(oldFile.getName()+"==================");
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. return;
  34. }
复制代码
重命名类:
  1. class MyFileRenamePolicy implements FileRenamePolicy {
  2. public File rename(File file) {
  3. oldFile = file;
  4. String fileSaveName = StringUtils.join(new String[] { java.util.UUID.randomUUID().toString(), ".",
  5. FilenameUtils.getExtension(file.getName()) });
  6. File result = new File(file.getParentFile(), fileSaveName);
  7. return result;
  8. }
  9. }
复制代码

OK,至此上传全部完成了

转载自:http://www.ityangba.com/thread-49-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值