GooUploader 控件实现上传文件
来源:互联网 发布:宏编程鼠标lol算开挂吗 编辑:程序博客网 时间:2024/04/29 09:12
要实现多文件上传,也就是批量上传文件。之前批量上传的做法是利用js或jquery来动态添加删除<input type="file" name="file" />的感觉这样 用户体验不太好,在网上搜了半天 得到GooUploader这个控件,感觉还不错 !
可设定为是否单个上传,或者是批量上传;
可在上传过程中取消上传(单个或者批量取消);
在批量选择文件后,可以手工选择上传其中部分文件;
可在上传文件时顺带上传REQUEST传参,如SESSION_ID;
选择批量文件,在上传前,用户还可删除其中几个不想上传的文件;
本控件内置一个保存了文件列表信息的数组$fileList,其单元为JSON对象,保存了每个文件的ID,名称,类型,大小等信息;
可自定义按钮显示文字,文件上传的服务器端地址,以及SWF控件相对于当前网页的相对路径
本个控件包是建立在JSP基础上为大家展示上传效的,但实际该控件有用的部分仅在客户端前台;后台代码可以全部推翻,重新用PHP,.NET等其它动态语言编写
使用了本控件后,在后台编写代码时,不必编写实时监控文件上传进度的复杂代码,只用编写简单的处理保存上传文件的代码即可,因为FLASH插件会自动帮助算出上传进度,并实时定时给控件提供进度显示数据,这样就减轻了后台开发人员的工作量;
基于上一点,本控件前台也不会以长轮询方式访问服务器端,以获取文件上传进度情况,而是自己定时计算以上传的字节总数。因此当上传一个文件时,FLASH插件只会发一次传输请求,这样就改善了效率。
本控件兼容IE6--IE8,Firefox,chrome浏览器,但需要FLASH PLAYER 9版本以上的支持
我用两种方式一种springmvc 一种 servlet 废话多说了 直接看效果
项目结构如下:
1、servlet实现代码
package com.hosenses.filemanage.action;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItemIterator;import org.apache.commons.fileupload.FileItemStream;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.util.Streams;/** * Servlet implementation class */public class ServletUpload extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {try {// 设置编码request.setCharacterEncoding("UTF-8");// 判断文件上传内容信息if (ServletFileUpload.isMultipartContent(request)) {// 当文件比较 多事 直接保存到内存中DiskFileItemFactory dff = new DiskFileItemFactory();// 临时保存路径// dff.setRepository(this.tmpDir);// 文件内容大小dff.setSizeThreshold(1024000);// 文件上传ServletFileUpload sfu = new ServletFileUpload(dff);sfu.setFileSizeMax(109999999L);sfu.setSizeMax(999999999L);FileItemIterator fii = sfu.getItemIterator(request);// 文件保存路径// 获取文件 存储位置String realPath = request.getSession().getServletContext().getRealPath("/uploadFile");while (fii.hasNext()) {FileItemStream fis = fii.next();if ((!fis.isFormField()) && (fis.getName().length() > 0)) {System.out.println("文件名字:" + fis.getName() + "文件大小;"+ fis.getFieldName());String fileName = fis.getName();BufferedInputStream in = new BufferedInputStream(fis.openStream());BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(realPath + "\\"+ fileName)));Streams.copy(in, out, true);}}response.getWriter().println("File upload successfully!!!");}} catch (Exception e) {e.printStackTrace();}}}
2、springmvc实现
package com.hosenses.filemanage.action;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;@Controllerpublic class FileCollont {/** * 上传方法 * @param request * @param response * @throws IllegalStateException * @throws IOException */@RequestMapping("/upload.act")@ResponseBodypublic void uploadFile(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException { request.setCharacterEncoding("utf-8");//创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //判断 request 是否有文件上传,即多部分请求 if(multipartResolver.isMultipart(request)){ //转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; //取得request中的所有文件名 Iterator<String> iter = multiRequest.getFileNames(); //获取文件 存储位置 String realPath = request.getSession().getServletContext() .getRealPath("/uploadFile"); System.out.println(realPath); File pathFile = new File(realPath); if (!pathFile.exists()) { //文件夹不存 创建文件 pathFile.mkdirs(); } while(iter.hasNext()){ //取得上传文件 MultipartFile file = multiRequest.getFile(iter.next()); if(file != null){ //取得当前上传文件的文件名称 String myFileName = file.getOriginalFilename(); //copy到服务器上 file.transferTo(new File(realPath + "/" + file.getOriginalFilename())); System.out.println(myFileName); } } } } @RequestMapping("/gooUploader.act")@ResponseBodypublic void gooUploader(HttpServletRequest request){try {DefaultMultipartHttpServletRequest mulRequest = (DefaultMultipartHttpServletRequest) request;List<MultipartFile> multipartFileList = mulRequest.getFiles("Filedata");//创建上传类 创建一个磁盘工厂ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory());//设置上传编码fileUpload.setHeaderEncoding("utf-8");Iterator<MultipartFile> it = multipartFileList.iterator();//获取文件 存储位置 String realPath = request.getSession().getServletContext() .getRealPath("/uploadFile"); System.out.println(realPath); File pathFile = new File(realPath); if (!pathFile.exists()) { //文件夹不存 创建文件 pathFile.mkdirs(); } while(it.hasNext()){ //取得上传文件 MultipartFile file = it.next(); if(file != null){ //取得当前上传文件的文件名称 String myFileName = file.getOriginalFilename(); //copy到服务器上 file.transferTo(new File(realPath + "/" + file.getOriginalFilename())); System.out.println(myFileName); } } }catch(Exception e){e.printStackTrace();}}}
3、html代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>文件上传控件GooUploader</title><link rel="stylesheet" type="text/css" href="codebase/GooUploader.css" /><script type="text/javascript" src="codebase/jquery-1.3.2.min.js"></script><script type="text/javascript" src="codebase/GooUploader.js"></script><script type="text/javascript" src="codebase/swfupload/swfupload.js"></script><script type="text/javascript"> var demo; //var post_params = {session_id:"f1423rwe543t4wrtwerwe"}; //构造函数 参数var property={ width:700, //控件的宽度,默认时可不填 height:300, //控件的高度,默认时可不填 multiple:true, //如果它为TRUE,则允许批量上传,如为FALSE,则为只允许单个文件一传 file_post_name : "Filedata", file_types:"*.jpg;*.gif", //可上传的文件类型,“如*.jpg;*.gif”,默认为“*.*”,用分号隔开 // file_types_description: "Web Image Files", // post_params:post_params, //一个JSON数据,文件上传时一同传至服务器端的REUQUEST传参 btn_add_text:"添加", //添加按钮显示文字 btn_up_text:"上传", //上传按钮显示文字(当multiple为FALSE时,此项无作作,不必填) btn_cancel_text:"放弃", //取消按钮显示文字(当multiple为FALSE时,此项无作作,不必填) btn_clean_text:"清空", //清空按钮显示文字(当multiple为FALSE时,此项无作作,不必填) op_del_text:"单项删除", //文件列表中快捷操作图标“单项删除”的注释文字 op_up_text:"单项上传", //文件列表中快捷操作图标“单项上传”的注释文字 op_fail_text:"上传失败", //文件列表中快捷操作图标“上传失败”的注释文字 op_ok_text:"上传成功", //文件列表中快捷操作图标“上传成功”的注释文字 op_no_text:"取消上传", //文件列表中快捷操作图标“取消上传”的注释文字 upload_url:'<%=basePath%>ServletUpload', //上传目标服务器的相对路径,比必须是相对于SWF插件所在的路径,或者是绝对路径 flash_url :"codebase/swfupload.swf", //property.flash_url||"swfupload.swf"SWF插件相对于网页文件所在相对路径 // file_size_limit : file_size_limit||0,//文件大小限制,单位为KB,0表示大小无限制 //file_upload_limit: file_upload_limit||0,//允许上传的最多文件数量,0表示大小无限制 // file_queue_limit:property.file_queue_limit||0,}; $(document).ready(function(){ demo=$.createGooUploader($("#demo"),property) ;}); </script></head><body><div id="demo"></div></body></html>
以上项目下载地址 不含jar:http://download.csdn.net/detail/itlqi/8871339
- GooUploader 控件实现上传文件
- 基于jquery ajax 无刷新 文件批量上传插件 GooUploader整合struts2实现上传
- 基于jquery ajax 无刷新 文件批量上传插件 GooUploader整合struts2实现上传
- FileUpload控件实现上传文件
- springMVC 使用 goouploader 插件进行文件批量上传
- asp用控件实现文件上传
- SlickUploadFile控件 实现asp.net文件上传
- 使用ActiveX控件实现批量文件上传
- 【转载】FileUpload控件如何实现文件上传
- 用FileUpload控件实现文件上传
- ASP.NET实现文件上传控件
- .net 服务器控件实现文件上传
- 美化文件上传控件
- 美化文件上传控件
- 文件上传控件(FileUpload)
- 增加上传文件控件
- 上传文件控件资料
- Input控件上传文件
- cpu与内存
- 猜猜看游戏的开发总结
- c#作业第5期
- BSCB 图像修复算法 Matlab 仿真-(2000)
- 常见的面向对象设计原则
- GooUploader 控件实现上传文件
- Activity源码
- DOS命令基本运用
- Spring MVC 学习5:Spring MVC的参数处理
- [安卓]新闻客户端(三) 主页面之slidingMenu & fragment(1)
- 获取整数二进制1的个数
- 关于C++的子类指针指向父类
- 关于预编译头以及StdAfx.cpp的解惑
- WindowDecorActionBar源码