jquery 分片上传php,php 大文件分片上传
前端部分
上傳
//上傳控件
uploadBig('upload','zip,rar,7z,tar',{
id: '',
type: 'upload_file',
} ,(res)=>{
//todo 上傳完成回調
console.log('上傳完成',res);
},(percent)=>{
//todo 上傳中回調
console.log(percent);
})
/*
* 大文件分片上傳
* @param btn 綁定上傳按鈕 id
* @param ext 上傳文件后綴限制 英文逗號分隔
* @param formData 額外參數
* @param callback 回調函數 function
* @param progress 上傳過程回調函數 function
*
*/
function uploadBig(btn,ext,formData,callback,progress){
var arr = ext.split(',');
var mimeTypes = '';
for(var ai=0;ai
mimeTypes += '.'+arr[ai]+','
}
mimeTypes = mimeTypes.substring(0,mimeTypes.length-1);
let uploader = new WebUploader.Uploader({
// swf文件路徑
// swf: 'webuploader/Uploader.swf',
// 文件接收服務端。
server: 'uploader.php',
auto:true,
// 選擇文件的按鈕??蛇x。
// 內部根據當前運行是創建,可能是input元素,也可能是flash.
pick: '#'+btn,
// 分片上傳。
chunked: true,
threads:1,//并發上傳數
chunkSize: 2 1024 1024,
// 不壓縮image, 默認如果是jpeg,文件上傳前會壓縮一把再上傳!
resize: false,
accept: {
title:'',
extensions:ext,
mimeTypes:mimeTypes
},
formData: formData
});
// //開始上傳
// $('#ctlBtn').click(function () {
// uploader.upload();
// });
let $list = $('#upload_big_list');
// 當有文件被添加進隊列的時候
uploader.on( 'fileQueued', function( file ) {
$list.append( '
' +// '
' + file.name + '
' +// '
'
' );uploader.upload();
});
// 文件上傳過程中創建進度條實時顯示。
uploader.on( 'uploadProgress', function( file, percentage) {
if(typeof progress == 'function'){
progress(percentage);
}
});
uploader.on( 'uploadSuccess', function( file, response ) {
if (response.status == 1) {
callback(response);
}
});
uploader.on("error", function (type) {
if (type == "Q_TYPE_DENIED") {
alert("上傳文件類型錯誤!");
}
else if(type == 'F_DUPLICATE'){
alert("上傳文件重復");
}
// else if (type == "Q_EXCEED_SIZE_LIMIT") {
// alert("文件大小不能超過2M");
// }
else {
alert("上傳出錯,請聯系管理員。error: "+type);
}
});
}
后臺 uploader.php<?php
header("Content-type: text/html; charset=utf-8");
header('Access-Control-Allow-Origin:*');
//儲存分片
//獲取文件后綴名
$ext_name = substr(strrchr($_REQUEST['name'], '.'), 1);
//隨機生成保存的文件名
$file_name = GetRandStr(10).".$ext_name";
//分片保存目錄
$request_name = $_REQUEST['name'];
$tmp_dir = 'upload/chunk_tmp/' .$request_name . '/';
//文件保存目錄
$target_file = "upload/;
if (! is_dir($tmp_dir)) {
mkdir($tmp_dir, 0777, true);
}
if(!isset($_REQUEST['chunk'])){
$chunk = '0';
$chunks = '1';
}else{
$chunk = $_REQUEST['chunk'];
$chunks = $_REQUEST['chunks'];
}
move_uploaded_file($_FILES['file']['tmp_name'], $tmp_dir . $chunk);
//合并分片
if ($chunk == $chunks - 1) { //最后一個分片
if (! is_dir($target_file)) {
mkdir($target_file, 0777, true);
}
$target_file .= $file_name;
$handle = fopen($target_file, 'x+');
for ($i=0; $i
fwrite($handle, @file_get_contents($tmp_dir . $i));
}
fclose($handle);
//刪除分片文件
// for ($i=0; $i
// @unlink($tmp_dir . $i);
// }
// rmdir($tmp_dir);
$msg = [
'$_FILES' => json_encode($_FILES),
'$_REQUEST' => json_encode($_REQUEST),
];
echo json_encode(['status' => 1,'file_path'=>$target_file,'file_name'=>$file_name]);exit;
}else{
$target_file = '';
}
$msg = [
'$_FILES' => json_encode($_FILES),
'$_REQUEST' => json_encode($_REQUEST),
];
echo json_encode(['status' => 1, 'msg' => json_encode($msg),'file_path'=>$target_file,'file_name'=>$file_name]);exit;
function GetRandStr ($length){
$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len=strlen($str)-1;
$randstr='';
for($i=0;$i
$num=mt_rand(0,$len);
$randstr .= $str[$num];
}
return $randstr;
}
總結
以上是生活随笔為你收集整理的jquery 分片上传php,php 大文件分片上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php的mpdf开发实例,mpdf自动分
- 下一篇: 动态规划算法php,php算法学习之动态