下面通过一段代码给大家演示下,主要分为1.前台文件index.html和 2.后台文件upload.php。具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
1.前台文件index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
<meta http-equiv= "Content-Type" content= "text/html; charset=gb2312" />
<head>
<title>SWFUpload</title>
<link href= "css/default.css" rel= "stylesheet" type= "text/css" />
<!--Swfupload插件begin-->
<script type= "text/javascript" src= "swfupload/swfupload.js" ></script>
<script type= "text/javascript" src= "js/swfupload.queue.js" ></script>
<script type= "text/javascript" src= "js/fileprogress.js" ></script>
<script type= "text/javascript" src= "js/handlers.js" ></script>
<!--Swfupload插件 end -->
<script type= "text/javascript" >
var swfu;
window.onload = function () {
var settings = {
flash_url : "swfupload/swfupload.swf" ,
upload_url: "upload.php" , // 后台文件
post_params: { "PHPSESSID" : "<?php echo session_id(); ?>" },
file_size_limit : "100 MB" ,
file_types : "*.*" ,
file_types_description : "All Files" ,
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress" ,
cancelButtonId : "btnCancel"
},
debug: false,
// 按钮设置
button_image_url: "images/TestImageNoText_65x29.png" , // Flash样式图片文件
button_width: "65" ,
button_height: "29" ,
button_placeholder_id: "spanButtonPlaceHolder" ,
button_text: '<span class="theFont">浏览</span>' ,
button_text_style: ".theFont { font-size: 16; }" ,
button_text_left_padding: 12,
button_text_top_padding: 3,
// 句柄设置
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,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete
};
swfu = new SWFUpload(settings);
};
</script>
</head>
<body>
<div id= "header" >
<h1 id= "logo" ><a href= "/" >SWFUpload</a></h1>
<div id= "version" >v2.2.0</div>
</div>
<div id= "content" >
<form id= "form1" action= "index.php" method= "post" enctype= "multipart/form-data" >
<p>点击“浏览”按钮,选择您要上传的文档文件后,系统将自动上传并在完成后提示您。</p>
<p>请勿上传包含中文文件名的文件!</p>
<div class = "fieldset flash" id= "fsUploadProgress" >
<span class = "legend" >快速上传</span>
</div>
<div id= "divStatus" >0 个文件已上传</div>
<div>
<span id= "spanButtonPlaceHolder" ></span>
<input id= "btnCancel" type= "button" value= "取消所有上传" onclick= "swfu.cancelQueue();" disabled= "disabled" style= "margin-left: 2px; font-size: 8pt; height: 29px;" />
</div>
</form>
</div>
<div align= "center" >Hanization By <a href= "http://imll.net" target= "_blank" >Leo.C,</a>
</div>
</body>
</html>
|
2.后台文件upload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
<?php
// 传递session值(由于Flash与session不兼容,只能通过参数传递获取)
if (isset( $_POST [ "PHPSESSID" ])) {
session_id( $_POST [ "PHPSESSID" ]);
} else if (isset( $_GET [ "PHPSESSID" ])) {
session_id( $_GET [ "PHPSESSID" ]);
}
session_start();
// 设置POST最大值
$POST_MAX_SIZE = ini_get ( 'post_max_size' );
$unit = strtoupper ( substr ( $POST_MAX_SIZE , -1));
$multiplier = ( $unit == 'M' ? 1048576 : ( $unit == 'K' ? 1024 : ( $unit == 'G' ? 1073741824 : 1)));
if ((int) $_SERVER [ 'CONTENT_LENGTH' ] > $multiplier *(int) $POST_MAX_SIZE && $POST_MAX_SIZE ) {
header( "HTTP/1.1 500 Internal Server Error" );
echo "POST exceeded maximum allowed size." ;
exit (0);
}
// 基本设置
$save_path = getcwd () . "/file/" ; // 文件上传位置
$upload_name = "Filedata" ;
$max_file_size_in_bytes = 2147483647; // 2GB
$extension_whitelist = array ( "doc" , "txt" , "jpg" , "gif" , "png" ); // 允许文件类型
$valid_chars_regex = '.A-Z0-9_ !@#$%^&()+={}\[\]\',~`-' ; // 文件名规则
// 其他变量
$MAX_FILENAME_LENGTH = 260;
$file_name = "" ;
$file_extension = "" ;
$uploadErrors = array (
0=> "文件上传成功" ,
1=> "上传的文件超过了 php.ini 文件中的 upload_max_filesize directive 里的设置" ,
2=> "上传的文件超过了 HTML form 文件中的 MAX_FILE_SIZE directive 里的设置" ,
3=> "上传的文件仅为部分文件" ,
4=> "没有文件上传" ,
6=> "缺少临时文件夹"
);
// 检测文件是否上传正确
if (!isset( $_FILES [ $upload_name ])) {
HandleError( "No upload found in \$_FILES for " . $upload_name );
exit (0);
} else if (isset( $_FILES [ $upload_name ][ "error" ]) && $_FILES [ $upload_name ][ "error" ] != 0) {
HandleError( $uploadErrors [ $_FILES [ $upload_name ][ "error" ]]);
exit (0);
} else if (!isset( $_FILES [ $upload_name ][ "tmp_name" ]) || !@ is_uploaded_file ( $_FILES [ $upload_name ][ "tmp_name" ])) {
HandleError( "Upload failed is_uploaded_file test." );
exit (0);
} else if (!isset( $_FILES [ $upload_name ][ 'name' ])) {
HandleError( "File has no name." );
exit (0);
}
// 检测文件尺寸
$file_size = @ filesize ( $_FILES [ $upload_name ][ "tmp_name" ]);
if (! $file_size || $file_size > $max_file_size_in_bytes ) {
HandleError( "File exceeds the maximum allowed size" );
exit (0);
}
if ( $file_size <= 0) {
HandleError( "File size outside allowed lower bound" );
exit (0);
}
// 检测文件名字为空
$file_name = preg_replace( '/[^' . $valid_chars_regex . ']|\.+$/i' , "" , basename ( $_FILES [ $upload_name ][ 'name' ]));
if ( strlen ( $file_name ) == 0 || strlen ( $file_name ) > $MAX_FILENAME_LENGTH ) {
HandleError( "Invalid file name" );
exit (0);
}
// 检测重名文件
if ( file_exists ( $save_path . $file_name )) {
HandleError( "File with this name already exists" );
exit (0);
}
// 检测后缀名
$path_info = pathinfo ( $_FILES [ $upload_name ][ 'name' ]);
$file_extension = $path_info [ "extension" ];
$is_valid_extension = false;
foreach ( $extension_whitelist as $extension ) {
if ( strcasecmp ( $file_extension , $extension ) == 0) {
$is_valid_extension = true;
break ;
}
}
if (! $is_valid_extension ) {
HandleError( "Invalid file extension" );
exit (0);
}
// 保存文件
if (!@move_uploaded_file( $_FILES [ $upload_name ][ "tmp_name" ], $save_path . $file_name )) {
HandleError( "文件无法保存." );
exit (0);
}
// 成功输出
echo "File Received" ;
exit (0);
function HandleError( $message ) {
header( "HTTP/1.1 500 Internal Server Error" );
echo $message ;
}
?>
|
以上代码就是实现文件上传之SwFUpload插件的全部内容,希望大家喜欢。