内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

詳解利用plupload突破HTTP上傳限制

plupload 是一款國外的上傳開源組件,官方使用PHP作為服務(wù)器語言。這篇文章主要介紹plupload的在上傳大文件方面的應(yīng)用。

目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、武隆網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

plupload支持技術(shù):

1:Flash
2:Gears
3:HTML 5
4:Silverlight
5:BrowserPlus
6:HTML 4

plupload主要功能:

1:突破HTTP上傳限制,可上傳大文件,官方論壇中有討論上傳2G文件的應(yīng)用。
2:多文件隊列上傳
3:圖片自動生成縮略圖
4:上傳后自動生成唯一文件名
5:自定制UI

由于plupload 確實是一個功能比較強大的組件所以無法一一介紹所有功能特色,這里主要就網(wǎng)站開發(fā)中plupload上傳大文件的問題進行思路與代碼的解析 。

大文件上傳思路:plupload的上傳思路是將一個較大的文件分成多個小塊進行上傳從而達到突破服務(wù)器上傳限制的目的。這估計也是唯一的方法了,但本人測試過程中根據(jù)虛擬主機差異分塊上傳時對于可能會出現(xiàn)塊數(shù)太多中斷的原因,但這肯定是服務(wù)器的配置問題,更換服務(wù)器后該問題解決,也就是說大部分服務(wù)器均沒有問題的。

下載最新版本后按照官方DEMO進行安裝。

JS參數(shù)配置說明:

<script type="text/javascript"> $(function() { $("#uploader").pluploadQueue({ runtimes : \'gears,flash,silverlight,browserplus,html5\', // 這里是說用什么技術(shù)引擎,由于國內(nèi)瀏覽器問題這里一般使用flash即可。其他的刪除掉。 url : \'upload.php\', // 服務(wù)端上傳路徑 max_file_size : \'10mb\', // 文件上傳限制。 chunk_size : \'1mb\', // 上傳分塊每塊的大小,這個值小于服務(wù)器上傳限制的值即可。(文件總大小/chunk_size = 分塊數(shù))。 unique_names : true, // 上傳的文件名是否唯一 resize : {width : 320, height : 240, quality : 90}, // 是否生成縮略圖(僅對圖片文件有效)。 filters : [ {title : "Image files", extensions : "jpg,gif,png"}, {title : "Zip files", extensions : "zip"} ], // 這個數(shù)組是選擇器,就是上傳文件時限制的上傳文件類型 flash_swf_url : \'/plupload/js/plupload.flash.swf\', // plupload.flash.swf 的所在路徑 silverlight_xap_url : \'/plupload/js/plupload.silverlight.xap\' // silverlight所在路徑 }); // 這一塊主要是防止在上傳未結(jié)束前表帶提交,具體大家可酌情修改編寫 $(\'form\').submit(function(e) { var uploader = $(\'#uploader\').pluploadQueue(); // 取得上傳隊列 if (uploader.files.length > 0) { // 就是說如果上傳隊列中還有文件 uploader.bind(\'StateChanged\', function() { if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) { $(\'form\')[0].submit(); } }); uploader.start(); } else { alert(\'You must queue at least one file.\'); } return false; }); }); </script>

由于參數(shù)過多大家可以到官方網(wǎng)站查看API參數(shù)說明。

服務(wù)端代碼說明:
官方自帶了PHP版本的DEMO文件。大家一定要參考這個DEMO進行編寫或者直接使用。在此我簡單的做一下官方upload.php的注釋說明。

<?php// HTTP headers for no cache etc 頭部沒有緩存 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");//上傳路徑 $targetDir = \'uploads/\';// 腳本執(zhí)行時間 @set_time_limit(5 * 60);// 延遲 // usleep(5000); // 接收 pluploa的參數(shù) $chunk = isset($_REQUEST["chunk"]) ? $_REQUEST["chunk"] : 0;$chunks = isset($_REQUEST["chunks"]) ? $_REQUEST["chunks"] : 0;$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : \'\';// 文件名整理 $fileName = preg_replace(\'/[^w._]+/\', \'\', $fileName);// 這里主要是如果JS參數(shù)設(shè)置了唯一文件名,則進行唯一文件名的處理,chunks<2 的意思是只有在不分塊上傳的情況下才會進行唯一文件名。否則將和分塊上傳的原理沖突,第1塊以后的文件流將無法寫入正確的文件中。 if ($chunks < 2 && file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName)) { $ext = strrpos($fileName, \'.\'); $fileName_a = substr($fileName, 0, $ext); $fileName_b = substr($fileName, $ext); $count = 1; while (file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName_a . \'_\' . $count . $fileName_b)) $count++; $fileName = $fileName_a . \'_\' . $count . $fileName_b; }/*創(chuàng)建文件目錄*/ if (!file_exists($targetDir)) @mkdir($targetDir);if (is_dir($targetDir) && ($dir = opendir($targetDir))) { while (($file = readdir($dir)) !== false) { $filePath = $targetDir . DIRECTORY_SEPARATOR . $file; // Remove temp files if they are older than the max age if (preg_match(\'/\\.tmp$/\', $file) && (filemtime($filePath) < time() - $maxFileAge)) @unlink($filePath); } closedir($dir); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}\'); */// 上傳寫文件步驟,這一部分以下的代碼可直接引用 if (isset($_SERVER["HTTP_CONTENT_TYPE"])) $contentType = $_SERVER["HTTP_CONTENT_TYPE"];if (isset($_SERVER["CONTENT_TYPE"])) $contentType = $_SERVER["CONTENT_TYPE"];// Handle non multipart uploads older WebKit versions didn\'t support multipart in HTML5 if (strpos($contentType, "multipart") !== false) { if (isset($_FILES[\'file\'][\'tmp_name\']) && is_uploaded_file($_FILES[\'file\'][\'tmp_name\'])) { // Open temp file $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen($_FILES[\'file\'][\'tmp_name\'], "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}\'); fclose($in); fclose($out); @unlink($_FILES[\'file\'][\'tmp_name\']); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}\'); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}\'); } else { // Open temp file $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); if ($out) { // Read binary input stream and append it to temp file $in = fopen("php://input", "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}\'); fclose($in); fclose($out); } else die(\'{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}\'); }// Return JSON-RPC response die(\'{"jsonrpc" : "2.0", "result" : null, "id" : "id"}\'); ?>

參考資料:

www.mwinds.net

www.plupload.com

由于該組件確實很強大,但是中文資料非常的少,所以發(fā)表這篇文章希望對大家有所幫助。以后將會陸續(xù)介紹plupload的其他方面應(yīng)用比如自定制上傳問題跟IE兼容問題。

當(dāng)前文章:詳解利用plupload突破HTTP上傳限制
網(wǎng)址分享:http://m.rwnh.cn/article46/cgdjhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、關(guān)鍵詞優(yōu)化、微信公眾號品牌網(wǎng)站設(shè)計、網(wǎng)站策劃、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
天等县| 鄂托克前旗| 义马市| 句容市| 无极县| 白水县| 岚皋县| 丰城市| 民权县| 鄯善县| 班戈县| 西宁市| 香格里拉县| 宁化县| 旬邑县| 积石山| 南木林县| 乌拉特前旗| 开封县| 宿松县| 晋江市| 祁东县| 通河县| 屯门区| 达拉特旗| 乡城县| 肥城市| 息烽县| 二连浩特市| 望奎县| 政和县| 贵溪市| 泰来县| 西华县| 澳门| 金沙县| 太谷县| 靖安县| 于都县| 南靖县| 马尔康县|