最近事儿不多,就研究了下SWFupload,在这里记录下。
所用技术和实现的效果:使用Servlet实现的文件上传、下载
1、在项目中导入上传所需要的几个JAR包:
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
(可以在附件中下载)
2、导入SWFupload所需要的几个JS包:
<script type="text/javascript" src="swfupload/swfupload.js"></script>
<script type="text/javascript" src="swfupload/swfupload.swfobject.js"></script>
<script type="text/javascript" src="swfupload/swfupload.queue.js"></script>
<script type="text/javascript" src="swfupload/fileprogress.js"></script>
<script type="text/javascript" src="swfupload/handlers.js"></script>
这几个包有些根据需要进行修改了,所以不是标准的。标准的可以去官网上下。(我这打不开,所以就没下,直接用的公司现成的)。
另外还有一个swf文件:swfupload.swf(也可以在附件中下载)
因为后面有用到Jquery,所以还需要导入Jquery的包:
<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
3、用到的JS,主要是SWFupload所需要的一系列配置:
<script type="text/javascript">
var swfu;
SWFUpload.onload = function () {
var settings = {
flash_url : '<%=path%>/swfupload/swfupload.swf',
upload_url: '<%=path%>/FileUploadServlet?flag=1',
//file_size_limit:指定要上传的文件的最大体积,可以带单位,合法的单位有:B、KB、MB、GB,如果省略了单位,则默认为KB。该属性为0时,表示不限制文件的大小
file_size_limit : '20000.0 MB',//单个文件大小
//file_types:指定了允许上传的文件类型,当有多个类型时使用分号隔开,比如:*.jpg;*.png ,允许所有类型时请使用 *.*
file_types : '*.doc;*.xls;*.txt;*.jpg;*.jpeg;*.png;*.bmp;*.dwg;*.dwf;*.zip;*.rar;*.docx;*.xlsx',//能够上传的文件类型
//file_types_description:指定在文件选取窗口中显示的文件类型描述,起一个提示和说明的作用
file_types_description :'全部文件',//文件类型描述
//file_upload_limit:指定最多能上传多少个文件,当上传成功的文件数量达到了这个最大值后,就不能再上传文件了,也不能往上传队列里添加文件了。
//把该属性设为0时表示不限制文件的上传数量。
file_upload_limit : 100,//每次允许上传的文件个数
//file_queue_limit:指定文件上传队列里最多能同时存放多少个文件。当超过了这个数目后只有当队列里有文件上传成功、上传出错或被取消上传后,
//等同数量的其他文件才可以被添加进来。当file_upload_limit的数值或者剩余的能上传的文件数量小于file_queue_limit时,则取那个更小的值
file_queue_limit : 0,
custom_settings : {
progressTarget : 'fsUploadProgress',
cancelButtonId : 'btnCancel',
uploadButtonId : 'btnUpload',
myFileListTarget : 'idFileList' },
debug: false,
auto_upload:false,
button_image_url : 'images/btn_xzwj.gif',//选择文件的按钮图片位置
button_placeholder_id : 'spanButtonPlaceholder', //指定一个dom元素的id,该dom元素在swfupload实例化后会被Flash按钮代替,这个dom元素相当于一个占位符
button_width: 100,
button_height: 22,
swfupload_loaded_handler : swfUploadLoaded,
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,//uploadSuccess事件侦听函数
upload_complete_handler : uploadComplete, //当一次文件上传的流程完成时(不管是成功的还是不成功的)会触发该事件,该事件表明本次上传已经完成,上传队列里的下一个文件可以开始上传了。该事件发生后队列中下一个文件的上传将会开始
queue_complete_handler : queueComplete,
minimum_flash_version : '9.0.28',
swfupload_pre_load_handler : swfUploadPreLoad,
swfupload_load_failed_handler : swfUploadLoadFailed
};
swfu = new SWFUpload(settings);
}
</script>
SWFupload参数详解:http://hanxin0311.iteye.com/blog/1915615
4、用到的样式:
<style type="text/css">
.uploadBar { display:block; width: 0px; height: 5px; border: solid 1px #445566; background-color: blue; overflow:hidden; }
TR.uploadTR { color:#234245; height:22px; }
TD.uploadTD { border-top: 1px dotted #CCCCCC }
.uploadCancel { border-bottom: solid 1px blue; cursor:pointer; text-decoration:none; }
.uploadFileList { border-collapse:collapse; width:90%; height:22px; font-size:12px; text-align:center; font-family:'微软雅黑'; margin-bottom:5px; }
.uploadFileList .uploadTitle { vertical-align: middle; font-weight:700; background:#006e58; border-collapse:collapse; height:22px; color:#fff }
.uploadFileList .uploadTitle b { color:#FFFFFF }
.uploadFileList td { border:1px solid #ccc; text-ident:2px; white-space:nowrap; color:#006e57; line-height:22px; text-align:center; text-decoration:none; }
.uploadFileList .tr1 { background:#fff; height:22px }
.uploadFileList .tr2 { background:#F0F8FC; height:22px; }
.uploadFileList .tr_over { background:#DEEFF9; height:22px }
.swfupload{ float:left;}
</style>
5、页面布局:
<body topmargin="0px" leftmargin="10px" rightmargin="10px" style="background:none;">
<table width="100%" cellspacing="4" cellpadding="4" border="0">
<tbody>
<tr>
<td class="DH1">
<table width="100%" cellspacing="4" cellpadding="4" border="0" bgcolor""#FCFCFC">
<tbody>
<tr>
<td class="DH2">
<strong>
批量上传文件
<br />
支持的文件类型:*.doc;*.xls;*.txt;*.jpg;*.jpeg;*.png;*.bmp;*.dwg;*.dwf;*.zip;*.rar;*.docx;*.xlsx;
<br />
单个文件最大不能超过:20000.0MB
</strong>
</td>
<td class="DH2" align="right"></td>
</tr>
</tbody>
</table>
<div id="content">
<form id="form1" method="post" enctype="multipart/form-data" action="/FileUploadServlet?flag=1">
<table width="90%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td>
<span id="spanButtonPlaceholder"></span>
<input id="btnUpload" type="button" value="上传文件" class="btn_scwj"/>
<input id="btnCancel" type="button" value="取消全部上传" disabled="disabled" class="btn_qxqbsc" />
</td>
</tr>
</tbody>
</table>
<!-- 显示上传文件列表的table -->
<table id="idFileList" class="uploadFileList">
<tbody>
<tr class="uploadTitle">
<td><b>文件名</b></td>
<td><b>文件大小</b></td>
<td><b>状态</b></td>
<td><b>操作</b></td>
</tr>
</tbody>
</table>
等待上传<span id="idFileListCount">0</span> 个 ,
成功上传<span id="idFileListSuccessUploadCount">0</span> 个
<div id="divSWFUploadUI" style="visibility: hidden;">
<input id="returnfield" type="text" value=""/></div>
<noscript style="padding-bottom: 10px; margin: 10px 5px; padding-left: 15px; padding-right: 15px; display: block; padding-top: 10px"></noscript>
<div style="border-bottom: #ff9966 1px solid; padding-bottom: 10px; background-color: #ffff66; margin: 10px 5px; padding-left: 15px; padding-right: 15px; display: none; border-top: #ff9966 1px solid; padding-top: 10px" id="divLoadingContent" class="content">文件上传界面正在载入,请稍后...</div>
<div style="border-bottom: #ff9966 1px solid; padding-bottom: 10px; background-color: #ffff66; margin: 10px 5px; padding-left: 15px; padding-right: 15px; display: none; border-top: #ff9966 1px solid; padding-top: 10px" id="divLongLoading" class="content">文件上传界面载入失败,请确保浏览器已经开启对javascript的支持,并且已经安装可以工作的flash插件版本。</div>
<div style="border-bottom: #ff9966 1px solid; padding-bottom: 10px; background-color: #ffff66; margin: 10px 5px; padding-left: 15px; padding-right: 15px; display: none; border-top: #ff9966 1px solid; padding-top: 10px" id="divAlternateContent" class="content">很抱歉,文件上传界面无法载入,请安装或者升级您的flash插件。
<br>解决方案:<br>
1.请点击 <a href="download/adobe flash player activex_10.0.45.2.exe" target="_blank">下载插件</a>,获取adobe flash player插件
<br>
2.请访问:<a href="http://www.adobe.com/shockwave/download/download.cgi?p1_prod_version=shockwaveflash" target="_blank">http://www.adobe.com/shockwave/download</a> adobe网站(外网),获取最新的flash插件。</div>
</form>
</div>
</td>
</tr>
</tbody>
</table>
<!-- 显示已经上传的文件列表的table,主要用来下载 -->
<table id="downFileList" class="uploadFileList" style="display:none;">
<tbody>
<tr class=uploadTitle>
<td><b>文件名</b></td>
<td><b>文件大小</b></td>
<td><b>文件路径</b></td>
<td><b>操作</b></td>
</tr>
</tbody>
</table>
</body>
6、用到的Servlet:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
File tmpDir = null;//初始化上传文件的临时存放目录
File saveDir = null;//初始化上传文件后的保存目录
/**
* Constructor of the object.
*/
public FileUploadServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
Integer flag = 1;//1、上传 2、下载
flag = Integer.parseInt(request.getParameter("flag"));
if(flag==1){
String retuStr="failed";
//判断是普通表单,还是带文件上传的表单。
//文件上传的表单有enctype="multipart/form-data"的属性,取值时不能按普通表单接收值那样直接获取。
if(ServletFileUpload.isMultipartContent(request)) {
//用 DiskFileItemFactory 创建新的 file items (只是临时的)
//DiskFileItemFactory 创建FileItem 实例,并保存其内容在内存或者硬盘中
//通过一个阀值来决定这个 FileItem 实例是存放在内存或者硬盘中
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置阀值大小,不设置的话,默认10k,超过这个阀值,FileItem将直接写入到磁盘
factory.setSizeThreshold(1024*10);
//设置临时文件夹
//不设置,默认为系统默认Temp文件路径,调用 System.getProperty("java.io.tmpDir") 获取
//超过阀值的 FileItem 实例将存放在这个目录中
factory.setRepository(tmpDir);
//构造servletFileUpload 的实例,该实例提供工厂模式创建FileItem的DiskFileItemFactory实例
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//设置一个完整的请求允许的最大大小(注意是完整请求,包括非file类型的表单,比如Text类型)
fileUpload.setSizeMax(10*1024*1024);
//设置所允许的最大的单个上传文件大小(对应一个FileItem对象)
fileUpload.setFileSizeMax(10*1024*1024);
try {
//每一个FileItem 对应一个 request 请求中from表单中的 input 元素
//解析 request 请求,将request中提交的值存入List数组
List<FileItem> fileItems = fileUpload.parseRequest(request);
Iterator i = fileItems.iterator(); // 依次处理每一个文件:
String fileName="";//文件名称
String phyFileName="";//文件物理名称
String filetype="";//文件类型
long filesize=0;//文件大小
String filepath = "";//文件所在物理目录
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
//isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。
//如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。
if (!fi.isFormField()) {
//getName方法用来获得文件上传字段中的文件名
//getFieldName方法用来返回表单标签的name属性的值
fileName= fi.getName().substring(fi.getName().lastIndexOf("\\") + 1); //获取文件名称
//此方法用来获得上传文件的类型,即标段字段元素描述头属性“content-type”的值,如image/jpeg。
//如果FileItem对象对应的是普通的表单字段,将返回null。
filetype = fi.getContentType();
//getSize:返回上传文件的大小。
filesize=fi.getSize();
System.out.println("文件类型:"+filetype);
System.out.println("大小:"+fi.getSize());//byte
//自定义存在数据库中的名称
phyFileName= System.currentTimeMillis()+ fileName.substring(fileName.lastIndexOf("."));
filepath=saveDir +"\\"+ phyFileName;
//write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,
//该方法完成后,临时文件可以会被删除。该方法也可以将普通表单字段保存在一个文件中,
//但最主要的用途是把上传的文件内容保存在本地文件系统中。
fi.write(new File(filepath));
} else {
//getString方法将FileItem对象中保存的数据流内容以一个字符串返回。
//它有两个重载形式。public java.lang.String getString()和public java.lang.String getString(java.lang.String encodeing) throws java.io.UnsupportedEncodingException。
//前者使用缺省的字符集编码将主体内容转换成字符串,
//后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现了乱码现象,可以调用第二个方法,并传入 正确的字符集编码名称。
String desc = fi.getString("UTF-8");
System.out.println("文件描述:" + desc);
}
}
//拼接“上传成功以后出发的uploadSuccess”方法需要的数据字符串
retuStr="<file><result>successed</result><filename>"+fileName+"</filename><filesize>"+filesize+"</filesize><filepath>"+filepath+"</filepath></file>";
}catch (Exception e) {
e.printStackTrace();
}finally{
}
PrintWriter out = response.getWriter();
//retuStr = new String(retuStr.getBytes("ISO8859-1"));
System.out.println(retuStr);//作为uploadSuccess方法serverData的参数值,可以由retuStr告知前台是否上传成功
out.println(retuStr);
out.flush();
out.close();
}else {
throw new RuntimeException("请设置form表单的enctype属性");
}
}else{ //下载
try{
String filepath = request.getParameter("filepath");//获取文件路径
System.out.println(filepath);
String filename = request.getParameter("filename");//获取文件名称
// filename = new String()
System.out.println(filename);
if(null!=filepath && !filepath.equals("")){
File fileLoad = new File(filepath);
FileInputStream in = null;
// 创建一个向客户端的输入流
byte b[] = new byte[1024];
File Tfile = new File(filepath);
if (!Tfile.exists()) throw new Exception("没有找到您需要的资源!");
//这个头文件很关键,必须告知filename,否则系统会自动将文件以txt的形式下载,且文件名称为请求的Servlet名称(文件名称:FileUploadServlet.txt)
response.setHeader("Content-Disposition", "attachment; filename="+ new String(filename.getBytes("GB2312"),"ISO-8859-1"));
OutputStream out = response.getOutputStream();
in = new FileInputStream(fileLoad);
int i = 0;
while ((i = in.read(b)) != -1) {
out.write(b, 0, i);
}
out.flush();
out.close();
}
}catch (Exception e) {
response.setCharacterEncoding("UTF-8");
response.getWriter().write("<html><script>alert('"+e.getMessage()+"');</script></html>");
response.getWriter().flush();
response.getWriter().close();
}
}
}
/* 对上传文件夹和临时文件夹进行初始化
*/
@Override
public void init() throws ServletException {
super.init();
String tmpPath = "D:\\tmpDir";
String savePath = "D:\\saveDir";
tmpDir = new File(tmpPath);//通过将给定路径名字符串转换为抽象路径名来创建一个新 File实例。
saveDir = new File(savePath);
if(!tmpDir.isDirectory())//测试此抽象路径名表示的文件是否是一个目录
tmpDir.mkdir(); //若不止,则创建此抽象路径名指定的目录
if(!saveDir.isDirectory())
saveDir.mkdir();
}
}
FileItem常用方法参考:
http://blog.csdn.net/smallhorn/article/details/7864658
http://blog.csdn.net/chinaliuyan/article/details/7002014
7、在文件上传之后需要触发handlers.js中的uploadSuccess方法,这个方法有修改,主要修改如下:
/**
* 当一个文件上传成功后会触发该事件
* @param {} file:文件信息对象
* @param {} serverData:服务器端输出的数据
*/
function uploadSuccess(file, serverData) {
//serverData:是从服务器端返回来的数据
var isSuccess = (serverData.indexOf("successed")>=0?true:false);
var returnstr="";
try {
if(isSuccess){
var data = $.parseXML(serverData);
var filename = $(data).find("filename").text();//文件名
var filesize = $(data).find("filesize").text();//文件大小
filesize = getFilesize(filesize);
var filepath = $(data).find("filepath").text();//文件路径
var tableStr = "<tr><td>"+filename+"</td><td>"+filesize+"</td><td>"+filepath+"</td><td><a onclick=fileDownLoad(this) href='javascript:void(0);'>下载</a></td>";
$("#downFileList").append(tableStr);
if(!$("#downFileList").is(":visible")){//隐藏状态
$("#downFileList").show();
}
var tr = document.getElementById(file.id);
var divs=document.getElementById("divSWFUploadUI");
returnstr=document.getElementById('returnfield').value;
if(returnstr==""){
returnstr=serverData.substring(serverData.indexOf("successed")+9,serverData.length);
}
else
{
returnstr=returnstr+"*"+serverData.substring(serverData.indexOf("successed")+9,serverData.length);
}
document.getElementById('returnfield').value=returnstr;
//alert(returnstr);
tr.style.color="green";
var bar = document.getElementById(file.id+"_bar");
bar.parentNode.innerHTML="上传成功";
var delObject = document.getElementById(file.id+"_del");
delObject.parentNode.innerHTML=" ";
document.getElementById(this.customSettings.myFileListTarget+"Count").innerHTML=this.getStats().files_queued;
}else{
var tr = document.getElementById(file.id);
tr.style.color="red";
var bar = document.getElementById(file.id+"_bar");
bar.parentNode.innerHTML="上传失败:"+serverData;
var delObject = document.getElementById(file.id+"_del");
delObject.parentNode.innerHTML=" ";
}
} catch (ex) {
this.debug(ex);
}
}
/**
*
* @param {} filesize:用byte表示的文件大小
* @return {}用KB或MB或byte表示的文件大小
*/
function getFilesize(filesize){
var filesize2 = (parseInt(filesize)/1024/1024);//由byte转成MB
var size = filesize;
if(filesize2>1){//说明超过1M
size = (filesize2.toFixed(2))+"MB";//保留两位小数
}else if(filesize2<1 && filesize2>0){//说明是KB
size = ((parseInt(filesize)/1024).toFixed(0))+"KB";//由byte转成KB,取整
}else{
size = (filesize)+"byte";
}
return size;
}
/**
* 文件下载
* @param {} filepath:文件所在物理目录
*/
function fileDownLoad(obj){
var $tr = $(obj).parent().parent();//TR
var filepath = $tr.children("td").eq(2).text();//获取文件路径
var filename = $tr.children("td").eq(0).text();//获取文件名称
if(filepath!='' && filepath!=null){
if(confirm("是否进行文件下载?")){
//alert(filepath+"\n"+window.location);
var urls = (window.location+'')+"/FileUploadServlet?filepath="+filepath+"&filename="+filename+"&flag=2&time="+(new Date()).getTime();
if ($("#bodyFileDown").length <1)
{
$("body").append("<iframe id='bodyFileDown' src='' ></iframe>");
$("#bodyFileDown").hide();
}
$("#bodyFileDown").attr("src", urls);
}
}
}
相关推荐
**SWFUpload 多文件上传带进度条实例详解** SWFUpload 是一款开源的JavaScript库,专门用于在网页上实现文件的多选上传,并且支持显示上传进度条,为用户提供更好的交互体验。在这个实例中,我们将探讨如何在VS2012...
总的来说,基于SwfUpload的上传实例结合进度条和仿QQ邮箱附件效果,是一个优秀的文件上传解决方案,尤其适合需要大量文件交互的Web应用。通过合理地利用其提供的API和事件机制,开发者可以创建出高效、友好的文件...
**SWFUpload 多选上传实例详解** 在Web开发中,文件上传是常见的功能之一,尤其是在用户需要上传多个文件时,传统的HTML表单提交方式往往无法满足需求,因为它一次只能选择一个文件。为了解决这一问题,SWFUpload...
php多文件上传 swfupload多文件上传 php源码swfUpload 多文件上传 php多文件上传 swfupload多文件上传 php源码swfUpload 多文件上传 php多文件上传 swfupload多文件上传 php源码swfUpload 多文件上传php实例代码...
**SWFUpload 文件上传控件详解** 在网页开发中,文件上传功能是不可或缺的一部分,而SWFUpload就是一款优秀的文件上传控件。它利用Flash技术,提供了多文件上传和进度显示的功能,使得用户在上传大文件或多个文件时...
**SwfUpload 多文件上传实例详解** SwfUpload 是一款功能强大的JavaScript和Flash结合的文件上传组件,它允许用户在网页上实现多文件选择和批量上传的功能。由于Flash技术的支持,SwfUpload 可以提供比纯JavaScript...
本实例代码是将SWFUpload与PHP结合使用,创建一个多文件上传的功能。以下是对这个实例代码中涉及的关键知识点的详细解释: 1. **SWFUpload 初始化**: 在HTML页面中,需要通过JavaScript初始化SWFUpload实例。这...
在这个"SwfUpload文件上传demo"中,我们可以深入理解SwfUpload的工作原理、特性以及如何在实际项目中应用。 1. **SwfUpload工作原理**: SwfUpload 利用Flash插件创建一个透明的按钮,用户点击该按钮后,可以触发...
这个"SWFUpload文件上传源码ASP"是针对ASP(Active Server Pages)开发的,旨在为ASP应用程序提供一个用户友好的多文件上传解决方案。下面将详细阐述SWFUpload的工作原理以及如何在ASP环境中集成和使用它。 1. **...
SWFUpload 是一款著名的文件上传组件,尤其在Web开发中被广泛应用。它巧妙地结合了Flash技术和JavaScript,为用户提供了一种高效、用户友好的多文件上传解决方案。在本文中,我们将深入探讨SWFUpload的工作原理、...
这个"swfupload上传实例"是一个具体的示例,展示了如何在PHP环境中集成SWFUpload以实现高效的文件上传功能。 ### 1. SWFUpload 概述 SWFUpload 是一款开源项目,利用Adobe Flash插件(SWF文件)作为前端界面,提供...
前后台已经融合 解压放在.net 3.5下就可以运行 包含 Extjs4.1 UploadPanel.js swfupload.js swfupload.swf swfupload_fp9.swf Upload.aspx Upload.aspx.cs UploadPanel.htm upload
SwfUpload是一款强大的JavaScript文件上传组件,它支持多文件上传功能,且在Web应用程序中广泛使用。本项目结合了jsp和servlet技术,同时也提供了与SSH框架的集成,使得文件上传功能可以在各种Java Web项目中无缝...
下载了一些前辈门和官方的一些实例,都写得太复杂了,有用没用的都堆在一起,根本看不清楚原理,花了很大功夫总算弄明白了,把一些不必要的代码全部删除,尽量做到最简,希望对大家有帮助,不要像我开始接触白费了很...
SWFUpload 是一个开源的JavaScript库,用于在网页上实现高级的文件上传功能。它尤其适合处理大文件和批量上传,提供了用户友好的界面,包括进度条显示,从而提升了用户体验。在ASP环境中,SWFUpload 可以很好地解决...
所有后来研究了下上传相关知识, 发现swfupload是一个不错的选择. 所以做了一个demo, 分享给大家. 特色: 1)利用javascript+flash实现纯Client的上传功能; 2)这样一来可以最大限度降低服务器端的压力; 3)实时显示...
**SWFUpload 知识点详解** ...通过以上步骤和知识点,你将能够有效地使用SWFUpload实现批量文件上传功能,并在MyEclipse 6.5环境下进行开发和调试。记住,持续优化和测试是确保上传功能稳定性和用户体验的关键。
这个实例是基于PHP的,因此我们将深入探讨如何利用SWFUpload与PHP结合,实现高效、友好的多文件上传体验。 首先,SWFUpload是通过Flash技术实现的,因为Flash支持在浏览器端选择并上传多个文件。它提供了丰富的API...