SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。
其官方网站:http://swfupload.org/
SWFUpload的主要特点
* 可以同时上传多个文件;
* 类似AJAX的无刷新上传;
* 可以显示上传进度;
* 良好的浏览器兼容性;
* 兼容其他JavaScript库 (例如:jQuery, Prototype等);
* 支持Flash 8和Flash 9;
SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。
我们来看看基本的实例:
一、前端文件:upload_batch.tpl(模板引擎:smarty)
<link type="text/css" href="swfupload/default.css" rel="stylesheet" />
<script type="text/javascript" src="swfupload/swfupload.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>
<script type="text/javascript">
window.onbeforeunload = function() //离开时弹出提醒对话框 当上传成功后自动跳转时,不进行提示,由自定义变量level值控制
{
var level = document.getElementById("level").value;
if(level == 1) {
return '';
}
}
</script>
<div id="content01" style="position:relative;">
<form id="form1" name="form1" action="index.php" method="post" enctype="multipart/form-data" >
<span class="right" id="choose_album" style="display:;">
请选择所属相册:
<select name="picgid" id="picgid" class="border var_h6" onchange="setPost();">
{section name=loop loop=$albumrs}
<option value="{$albumrs[loop].id}" {if $albumrs[loop].id == $aid}selected{/if}>{$albumrs[loop].name}</option>
{/section}
</select> 或者<a onclick="javascript:c_al_js()" style="cursor:pointer;">创建新相册</a></span>
<div id="overlay"style="position:absolute; top:0; left:0; background:#fff; width:120px; height:35px; display:none;"></div>
<span id="spanButtonPlaceHolder"></span>
<div class="flash clearfix">
<div class="up_detail">请先点击"添加照片"按钮,选择要上传的照片</div>
<div class="fieldset" id="fsUploadProgress">
</div>
</div>
<div id="divMovieContainer">
<a onclick="swfu.startUpload();" class="upload_disbutton" id="upload">开始上传</a>
</div>
<div>
</div>
<input type="hidden" id="level" value="2">
<input type="hidden" name="uid" value="{$userid}" id="uid">
</form>
</div>
<script type="text/javascript">
var swfu;
var settings = {
flash_url : "swfupload/swfupload.swf", //上传的Flash
upload_url: "http://www.domain.com/upload_batch.php", //处理上传请求的服务器端脚本URL
post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"}, //开辟了一个新的Session进程
file_size_limit : "5 MB", //上传文件体积上限,单位MB
file_types : "*.jpg;*.gif;*.png;*.jpeg", //允许上传的文件类型 用 ; 号分割
file_types_description : "All Files", //文件类型描述
file_upload_limit : 100, //限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加。0 则表示没有限制
file_queue_limit : 20, //上传队列数量限制
debug: false, //是否显示调试信息,上线后记得将此关闭
//添加照片的按钮设置
button_image_url: "swfupload/button.png", //按钮的图片
button_width: "110",
button_height: "30",
button_placeholder_id: "spanButtonPlaceHolder",
button_text: '',
button_text_style: ".add_button {display:block; float:left; background:#000000; font-size:13px; font-weight:bold; padding-left:30px; width:66px; height:30px; line-height:30px; color:#000; cursor:pointer; text-decoration:none; margin-left:5px; cursor:pointer; }",
button_text_left_padding: 12,
button_text_top_padding: 3,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
button_cursor: SWFUpload.CURSOR.HAND, //鼠标手型
//这些事件处理函数定义在:handlers.js 文件中
file_queued_handler : fileQueued, //文件成功选择后触发的事件处理函数
file_dialog_start_handler: fileDialogStart,
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, //文件上传成功后触发的事件处理函数
upload_complete_handler : uploadComplete //文件上传完成后触发的事件处理函数
};
//初始化和设置
function initSWF() {
swfu = new SWFUpload(settings);
}
function setPost() //动态传递参数
{
var aid = document.getElementById('picgid').value; //相册ID
var uid = document.getElementById('uid').value; //上传照片用户ID
swfu.addPostParam("gid", gid);
swfu.addPostParam("uid", uid);//动态修改SWFUpload初始化设置中的post_params属性,其中所有的值都将被覆盖。
}
initSWF(); //初始化
</script>
二、页面效果图
当选择好多个文件后,点击开始上传,上传文件的过程中,每一次都会去执行后端的保存文件。
三、后端文件是PHP程序:upload_batch.php
<?php
// Work-around for setting up a session because Flash Player doesn't send the cookies
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
}
session_start();
if (!isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
echo "There was a problem with the upload";
}
$gid = empty($_POST['aid']) ? '0' : $_POST['aid'];
$uid = $_POST['uid'];
//判断目录是否存在
$user_path = 'user/'.substr($uid,-3).'/'.$uid;
if(!file_exists('/home/www/hoopchina/image/'.$user_path)) {
if(!file_exists('../image/user/'.substr($uid,-3))) {
mkdir('../image/user/'.substr($uid,-3),0777);
}
if(!file_exists('../image/'.$user_path)) {
mkdir('../image/'.$user_path,0777);
}
}
//上传保存的路径
//$save_path = "../images/";
$save_path = '../image/'.$user_path;
//上传文件赋值给$upload_file
$upload_file = $_FILES['Filedata'];
//获取文件类型
$file_info = pathinfo($upload_file['name']);
//获取文件扩展名
$file_ext = strtolower($file_info['extension']);
if ($file_ext == 'jpeg') { //类型转换
$file_ext = 'jpg';
}
if (!isset($upload_file)) {
handleError("未找到上传文件" . $upload_file['name']);
exit(0);
} else if (!isset($upload_file['name'])) {
handleError("文件未命名");
exit(0);
}
$upload_file['filename'] = time().'.'.$file_ext;
$upload_file['filenamebig'] = time().'big.'.$file_ext;
$upload_file['filenamesmall'] = time().'small.'.$file_ext;
if (!@move_uploaded_file($upload_file["tmp_name"], $save_path.'/'.$upload_file['filenamebig'])) {
handleError("文件上传失败");
exit(0);
} else {
//切割图片cut_photo($x,$y,$oldpic,$newpic)
cut_photo(130,180,$save_path.'/'.$upload_file['filenamebig'], $save_path.'/'.$upload_file['filenamesmall']);
if($file_ext == 'gif') { //是否为GIF动画
$fp = fopen($save_path.'/'.$upload_file['filenamebig'], 'rb');
$filecontent = fread($fp, filesize($save_path.'/'.$upload_file['filenamebig']));
fclose($fp);
strpos($filecontent,chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0') === FALSE ? $isgif = 0 : $isgif = 1;
if ($isgif) { //如果是多帧的,刚不用切割,直接copy
copy($save_path.'/'.$upload_file['filenamebig'],$save_path.'/'.$upload_file['filename']);
} else {
cut_photo(750,1500,$save_path.'/'.$upload_file['filenamebig'], $save_path.'/'.$upload_file['filename']);
}
} else {
cut_photo(750,1500,$save_path.'/'.$upload_file['filenamebig'], $save_path.'/'.$upload_file['filename']);
}
//将图片被切割为(750,1500)大小的路径写入数据库
$db_path = $user_path.'/'.$upload_file['filename'];
//计算图片大小,单位:KB
$file_size = ceil($upload_file['size']/1024);
//写入数据库
$db->query("INSERT INTO photo (pid, aid, uid, name, pic, dateline, size, hits) VALUES (NULL, '{$aid}', '{$uid}' , '".iconv('utf-8','gbk', $upload_file['name'])."', '{$db_path}', '".time()."', '{$file_size}', '0')"); //iconv是为了上传中文文件名乱码的问题
}
exit(0);
function handleError($message) {
echo $message;
}
?>
以上只是个人在项目中用到的基本方法,只是部分代码。如有不对处,欢迎大家拍砖。希望对有需要的筒子起个抛砖引玉的效果。
注: 在使用过会偶尔弹出“uncaught exception: call to SetPostParams failed ” 错误,经分析应该swfu还未完全加载,后将这个函数的调用放入handlers.js中fileDialogStart()函数中:
function fileDialogStart()
{
setPost();
}
再测试,一切正常。
分享到:
相关推荐
这个"SWFUpload批量上传图片"的项目是一个基于MyEclipse的工程实例,旨在帮助开发者理解和实现批量上传图片的功能。下面我们将深入探讨SWFUpload的工作原理、主要特性以及如何在MyEclipse环境中进行集成和应用。 一...
SWFUpload是一款强大的JavaScript与Flash结合的文件上传组件,它允许用户在网页上实现批量上传图片的功能。在本文中,我们将深入探讨SWFUpload的工作原理、实现步骤以及如何在上传成功后显示缩略图,并对图片进行...
批量上传图片的功能是现代网站尤其是社交媒体和图像分享平台不可或缺的特性。SWFUpload 提供了这样的功能,允许用户选择多个文件并一次性提交,极大地提高了用户交互性。其工作原理是利用Flash插件在后台处理上传...
这个项目用的是SwfUpload批量上传,这个第三方库在上传之前并没有进行图片压缩和上传后图片显示功能,本人改写了flash,实现了图片上传前首先压缩图片,2M的图片压缩后100K到200K,上传后进行图片显示。采用的是java...
ASP.NET结合SWFUpload实现批量上传功能是一种常见的网页文件上传技术。SWFUpload是一个JavaScript库,它使用Flash技术提供了一种优雅的方式来进行大文件的多文件上传,特别适合那些需要处理大量图片或文档的Web应用...
总之,这个资源包结合了Asp.Net、Flash和SWFUpload,提供了一种批量上传图片并预览的功能实现,但请注意版权问题,仅适用于个人学习和研究。在实际开发中,可能需要寻找无版权限制的解决方案,或者使用HTML5原生的多...
SWFUpload 是一款开源的JavaScript库,主要用于在网页上实现文件的批量上传功能。它支持一次选取多个文件,用户可以在不刷新页面的情况下上传文件,提高了用户体验。本教程将详细介绍如何利用SWFUpload实现批量上传...
SwfUpload 是一款开源的JavaScript库,用于实现文件的批量上传功能。它通过Flash插件在Web页面上提供用户友好的界面,允许用户选择多个文件并一次性上传,极大地提升了文件上传的效率。在这个项目中,"完美运行"指的...
批量上传功能的实现主要依赖于SWFUpload的`setFilePostName`和`addFileParam`方法。`setFilePostName`用于设置上传文件在服务器端接收时的文件名,而`addFileParam`则可以在每个文件上传时添加额外的参数,如图片的...
"swfupload+asp+access批量上传图片" 这个标题涉及到三个主要的技术元素。首先,"swfupload" 是一个开源的Flash上传组件,它允许用户在网页上实现文件的批量上传功能,尤其适用于处理大文件或多个文件的上传需求。...
`swfupload` 是一个广泛使用的JavaScript和Flash相结合的开源上传组件,它允许用户实现多文件选择和批量上传功能,同时也支持大文件的分块上传。在这个场景下,我们主要关注的是如何利用`swfupload`实现最大1.9GB的...
总的来说,"php + swfupload 实现批量上传图片实例"是一个实用的解决方案,它利用PHP的文件处理能力和SWFUpload的多文件上传功能,为用户提供了一个易于使用的批量图片上传工具。只要配置正确,这个系统可以在各种...
1. 批量上传:SWFUpload 支持一次选择并上传多个文件,极大地提高了用户上传效率。 2. 预览功能:用户在上传前可以预览选定的文件,确保上传的是正确的内容。 3. 文件类型过滤:开发者可以通过配置限制可上传的文件...
在IT行业中,jQuery Swfupload是一款非常流行的图片上传插件,尤其适用于实现批量上传和单个文件上传功能。这个插件结合了jQuery的简洁API和SWFUpload的技术优势,为网页应用提供了强大的文件上传解决方案。下面我们...
Java中的SWFUpload是一种流行的文件上传工具,尤其适用于处理图片和文件的批量上传。这个工具在Web开发中被广泛使用,因为它提供了用户友好的界面和高效的数据传输能力。SWFUpload是一个基于Flash的组件,它允许用户...
SwfUpload是一款经典的JavaScript库,专门用于实现网页上的文件,特别是图片的批量上传功能。它通过Flash技术提供了一种在不刷新页面的情况下上传多张图片的解决方案,这在用户体验上有着显著的优势,因为它允许用户...
SWFUpload最初是由Vinterwebb.se开发的一个客户端的上传工具. 它结合了FLASH和JavaScript的功能,以提供一种超越了传统的浏览器中标签...SWFUpload提供API供开发者通过图片、文字、CSS的方式来自定制更灵活的UI显示。
总结来说,"swfupload + ASP批量上传图片可同步写入Access"是一个基于SWFUpload和ASP技术的文件上传解决方案,它利用Flash实现多文件批量上传,并将图片信息同步写入Access数据库,同时实现在页面上的即时显示。...
在本文中,我们将深入探讨如何使用ECSHOP与SWFUpload相结合来实现在网站上批量上传图片的功能。ECSHOP是一款流行的开源电子商务系统,而SWFUpload则是一个JavaScript和Flash混合的文件上传组件,它支持多文件选择和...