最近研究了下大文件上传的方法,找到了webuploader js 插件进行大文件上传,大家也可以参考这篇文章进行学习:《Web Uploader文件上传插件使用详解》
使用
使用webuploader分成简单直选要引入
?
1
2
3
4
5
|
<!--引入CSS-->
<link rel= "stylesheet" type= "text/css" href= "webuploader文件夹/webuploader.css" >
<!--引入JS-->
<script type= "text/javascript" src= "webuploader文件夹/webuploader.js" ></script>
|
HTML部分
?
1
2
3
4
5
6
7
8
|
< div id = "uploader" class = "wu-example" >
<!--用来存放文件信息-->
< div id = "thelist" class = "uploader-list" ></ div >
< div class = "btns" >
< div id = "picker" >选择文件</ div >
< button id = "ctlBtn" class = "btn btn-default" >开始上传 </ button >
</ div >
</ div >
|
初始化Web Uploader
?
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
|
jQuery( function () {
$list = $( '#thelist' ),
$btn = $( '#ctlBtn' ),
state = 'pending' ,
uploader;
uploader = WebUploader.create({
// 不压缩image
resize: false ,
// swf文件路径
swf: 'uploader.swf' ,
// 文件接收服务端。
server: upload.php,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#picker' ,
chunked: true ,
chunkSize:2*1024*1024,
auto: true ,
accept: {
title: 'Images' ,
extensions: 'gif,jpg,jpeg,bmp,png' ,
mimeTypes: 'image/*'
}
});
|
upload.php处理
以下是根据别人的例子自己拿来改的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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate" );
header( "Cache-Control: post-check=0, pre-check=0" , false);
header( "Pragma: no-cache" );
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'OPTIONS' ) {
exit ; // finish preflight CORS requests here
}
if ( ! empty ( $_REQUEST [ 'debug' ]) ) {
$random = rand(0, intval ( $_REQUEST [ 'debug' ]) );
if ( $random === 0 ) {
header( "HTTP/1.0 500 Internal Server Error" );
exit ;
}
}
// header("HTTP/1.0 500 Internal Server Error");
// exit;
// 5 minutes execution time
@set_time_limit(5 * 60);
// Uncomment this one to fake upload time
// usleep(5000);
// Settings
// $targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'uploads' .DIRECTORY_SEPARATOR. 'file_material_tmp' ;
$uploadDir = 'uploads' .DIRECTORY_SEPARATOR. 'file_material' ;
$cleanupTargetDir = true; // Remove old files
$maxFileAge = 5 * 3600; // Temp file age in seconds
// Create target dir
if (! file_exists ( $targetDir )) {
@ mkdir ( $targetDir );
}
// Create target dir
if (! file_exists ( $uploadDir )) {
@ mkdir ( $uploadDir );
}
// Get a file name
if (isset( $_REQUEST [ "name" ])) {
$fileName = $_REQUEST [ "name" ];
} elseif (! empty ( $_FILES )) {
$fileName = $_FILES [ "file" ][ "name" ];
} else {
$fileName = uniqid( "file_" );
}
$oldName = $fileName ;
$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName ;
// $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;
// Chunking might be enabled
$chunk = isset( $_REQUEST [ "chunk" ]) ? intval ( $_REQUEST [ "chunk" ]) : 0;
$chunks = isset( $_REQUEST [ "chunks" ]) ? intval ( $_REQUEST [ "chunks" ]) : 1;
// Remove old temp files
if ( $cleanupTargetDir ) {
if (! is_dir ( $targetDir ) || ! $dir = opendir( $targetDir )) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}' );
}
while (( $file = readdir( $dir )) !== false) {
$tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file ;
// If temp file is current file proceed to the next
if ( $tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp" ) {
continue ;
}
// Remove temp file if it is older than the max age and is not the current file
if (preg_match( '/\\.(part|parttmp)$/' , $file ) && (@ filemtime ( $tmpfilePath ) < time() - $maxFileAge )) {
@unlink( $tmpfilePath );
}
}
closedir ( $dir );
}
// Open temp file
if (! $out = @ fopen ( "{$filePath}_{$chunk}.parttmp" , "wb" )) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}' );
}
if (! empty ( $_FILES )) {
if ( $_FILES [ "file" ][ "error" ] || ! is_uploaded_file ( $_FILES [ "file" ][ "tmp_name" ])) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}' );
}
// Read binary input stream and append it to temp file
if (! $in = @ fopen ( $_FILES [ "file" ][ "tmp_name" ], "rb" )) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}' );
}
} else {
if (! $in = @ fopen ( "php://input" , "rb" )) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}' );
}
}
while ( $buff = fread ( $in , 4096)) {
fwrite( $out , $buff );
}
@fclose( $out );
@fclose( $in );
rename( "{$filePath}_{$chunk}.parttmp" , "{$filePath}_{$chunk}.part" );
$index = 0;
$done = true;
for ( $index = 0; $index < $chunks ; $index ++ ) {
if ( ! file_exists ( "{$filePath}_{$index}.part" ) ) {
$done = false;
break ;
}
}
if ( $done ) {
$pathInfo = pathinfo ( $fileName );
$hashStr = substr (md5( $pathInfo [ 'basename' ]),8,16);
$hashName = time() . $hashStr . '.' . $pathInfo [ 'extension' ];
$uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $hashName ;
if (! $out = @ fopen ( $uploadPath , "wb" )) {
die ( '{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}' );
}
if ( flock ( $out , LOCK_EX) ) {
for ( $index = 0; $index < $chunks ; $index ++ ) {
if (! $in = @ fopen ( "{$filePath}_{$index}.part" , "rb" )) {
break ;
}
while ( $buff = fread ( $in , 4096)) {
fwrite( $out , $buff );
}
@fclose( $in );
@unlink( "{$filePath}_{$index}.part" );
}
flock ( $out , LOCK_UN);
}
@fclose( $out );
$response = [
'success' =>true,
'oldName' => $oldName ,
'filePaht' => $uploadPath ,
'fileSize' => $data [ 'size' ],
'fileSuffixes' => $pathInfo [ 'extension' ],
'file_id' => $data [ 'id' ],
];
die (json_encode( $response ));
}
// Return Success JSON-RPC response
die ( '{"jsonrpc" : "2.0", "result" : null, "id" : "id"}' );
|
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关文章
猜你喜欢
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
如何在 Linux 中查找映射到 VxVM 磁盘的 SAN LUN
2025-05-27 102 -
企业网站云服务器租赁:VPS主机、独立服务器与网络安全保障方案
2025-06-04 44 -
2025-05-27 92
-
2025-05-27 59
-
2025-06-04 53
热门评论