本文实例讲述了thinkPHP5框架整合plupload实现图片批量上传功能的方法。分享给大家供大家参考,具体如下:
在官网下载plupload http://http//www.plupload.com
或者点击此处本站下载。
这里我们使用的是pluploadQueue
在HTML页面引入相应的css和js,然后根据示例代码修改为自己的代码
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
|
<link rel= "stylesheet" href= "/assets/plupupload/css/jquery.plupload.queue.css" rel= "external nofollow" type= "text/css" media= "screen" /> <div class= "form-box-header" ><h3>{:lang( 'photo' )}</h3></div> <div class= "t-d-in-editor" > <div class= "t-d-in-box" > <div id= "uploader" > <p>{:lang( 'plupupload_tip' )}</p> </div> <div id= "uploaded" ></div> </div> </div> <script type= "text/javascript" src= "/assets/plupupload/plupload.full.min.js" ></script> <script type= "text/javascript" src= "/assets/plupupload/jquery.plupload.queue.js" ></script> <script type= "text/javascript" > $( function () { // Setup html5 version $( "#uploader" ).pluploadQueue({ // General settings runtimes : 'html5,flash,silverlight,html4' , url : '{:url("photo/upphoto")}' , chunk_size: '1mb' , rename : true , dragdrop: true , filters : { // Maximum file size max_file_size : '10mb' , // Specify what files to browse for mime_types: [ {title : "Image files" , extensions : "jpg,gif,png" } ] }, // Resize images on clientside if we can resize : {width : 320, height : 240, quality : 90}, flash_swf_url : '/assets/plupupload/Moxie.swf' , silverlight_xap_url : '/assets/plupupload/Moxie.xap' , init: { PostInit: function () { $( '#uploaded' ).html( "" ); }, FileUploaded : function (uploader , files, result) { up_image = result.response; if (up_image != "" ){ $( "#uploaded" ).append( "<input type='hidden' name='images[]' value='" +up_image+ "'/>" ); //这里获取到上传结果 } } } }); }); </script> |
plupload整合:
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
|
<?php /* * 文件上传 * * Donald * 2017-3-21 */ namespace app\backend\logic; use think\Model; class Plupupload extends Model{ public function upload_pic( $file_type = "data" ){ #!! IMPORTANT: #!! this file is just an example, it doesn't incorporate any security checks and #!! is not recommended to be used in production environment as it is. Be sure to #!! revise it and customize to your needs. // Make sure file is not cached (as it happens for example on iOS devices) 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" ); /* // Support CORS header("Access-Control-Allow-Origin: *"); // other CORS headers if any... if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { exit; // finish preflight CORS requests here } */ // 5 minutes execution time @set_time_limit(5 * 60); // Uncomment this one to fake upload time // usleep(5000); // Settings //重新设置上传路径 $uploads = config( 'uploads_dir' ); if (! empty ( $file_type )){ $uploads = $uploads . $file_type . "/" . date ( "Ymd" ); } $targetDir = $uploads ; //$targetDir = 'uploads'; $cleanupTargetDir = true; // Remove old files $maxFileAge = 5 * 3600; // Temp file age in seconds // Create target dir if (! file_exists ( $targetDir )) { @ mkdir ( $targetDir ); } // Get a file name if (isset( $_REQUEST [ "name" ])) { $fileName = $_REQUEST [ "name" ]; } elseif (! empty ( $_FILES )) { $fileName = $_FILES [ "file" ][ "name" ]; } else { $fileName = uniqid( "file_" ); } //重命名文件 $fileName_arr = explode ( "." , $fileName ); $fileName = myrule(). "." . $fileName_arr [1]; //rule()请查看上篇我的上篇博客thinkphp同时上传多张图片文件重名问题 $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName ; // Chunking might be enabled $chunk = isset( $_REQUEST [ "chunk" ]) ? intval ( $_REQUEST [ "chunk" ]) : 0; $chunks = isset( $_REQUEST [ "chunks" ]) ? intval ( $_REQUEST [ "chunks" ]) : 0; // 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}.part" ) { continue ; } // Remove temp file if it is older than the max age and is not the current file if (preg_match( '/\.part$/' , $file ) && ( filemtime ( $tmpfilePath ) < time() - $maxFileAge )) { @unlink( $tmpfilePath ); } } closedir ( $dir ); } // Open temp file if (! $out = @ fopen ( "{$filePath}.part" , $chunks ? "ab" : "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 ); // Check if file has been uploaded if (! $chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename( "{$filePath}.part" , $filePath ); } // Return Success JSON-RPC response die ( $filePath ); //这里直接返回结果 // die('{"jsonrpc" : "2.0", "result" : "'.$filePath.'", "id" : "id"}'); } } |
最后Controller或Model获取结果并保存
1
2
|
$images = $request ->post( 'images/a' ); //这里一定要注意, thinkphp通过name获取post数组时会获取不到数据,需要在name后加/a,表示获取数组详见Request的typeCast model( 'PhotoImage' )->query_insert( $images , $id ); //批量插入图片 |
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
|
/** * 强制类型转换 * @param string $data * @param string $type * @return mixed */ private function typeCast(& $data , $type ) { switch ( strtolower ( $type )) { // 数组 case 'a' : $data = ( array ) $data ; break ; // 数字 case 'd' : $data = (int) $data ; break ; // 浮点 case 'f' : $data = (float) $data ; break ; // 布尔 case 'b' : $data = (boolean) $data ; break ; // 字符串 case 's' : default : if ( is_scalar ( $data )) { $data = (string) $data ; } else { throw new \InvalidArgumentException( 'variable type error:' . gettype ( $data )); } } } |
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/tang05709/article/details/70332398