詳細介紹了php檔案上傳後端處理小技巧,幫助大家更好的進行檔案上傳操作,感興趣的朋友可以參考一下。
業務場景一、我們只會選擇一個單個的檔案上傳,而且不需要做一些即時的驗證工作。那麼,也許並沒有什麼優化可言了,因為,最後你要做的,只是將這個檔案放在表單裡最後一起提交,直接處理即可!
業務場景二、需要上傳多個檔案,而且需要時時驗證檔案內部內容,並時行相應頁面顯示。對於這種況,在使用者選擇了上傳檔案之後,我們需要立即將檔案上傳,因為我們需要讀取檔案裡的資訊,在最後提交的時候,我們也需要提交一次檔案。很明顯,在這裡是存在一個重複上傳的.工作的,一個耗費使用者時間,二個是耗費服務器頻寬資源!優化,能夠想得到的方法也很簡單,能不能在第一次上傳完檔案之後,就將檔案保留在伺服器,真正提交表單的時候,去讀取這個已經被上傳的臨時檔案即可。是的,這就是我們的處理思路!
業務場景三、與場景二類似,需要上傳多個檔案,但是多個檔案可能是分開上傳的。即我們可能第一次上傳了10M,第二次上傳了10M,總共上傳了10次,那麼,在伺服器端來說的話,一次性提交肯定是超出了上傳大小的限制了,但是如果,我們是分每一次的上傳,這是可以的,而最後提交的時候,我們只需要將簡短的文字資訊傳上去即可!
思路的確是簡單的,看起來,也是沒什麼問題,但是,也許我是能力有限,當時著實花了我不少時間去處理這個什麼鬼!下面,我將給出一些示例程式碼,以供參考:
檔案上傳技巧(將單次上傳的檔案作為臨時檔案存在在伺服器端)示例程式碼:
1. 頁面js處理
//點選選擇完成檔案後,觸發上傳檔案操作,將檔案上傳至伺服器臨時目錄
$('ad-real-file')()('change', function(){
if(!$(this)()){
return false;
}
var responseObjId = $(this)('response-id');
var responseObj = $('#' + responseObjId);
$('#Form')Submit({
url:'/aa/bb/uploadTmpApkTool',
resetForm: false,
dataType: 'json',
beforeSubmit: function(option){
ing = (2);
},
success: function(data, statusText){
e(ing);
if(us == 1){
(nfoHtml);
var parentContainer = nt()nt(),
nameContainer = ('-name-container');
(ame);
('title', ame);
('-tmp')(Info); //將檔案資訊存放於隱藏域中,以便在提交時能找到
$(submitId)veAttr('disabled');
}else{
t();
}
},
error: function(data){
e(ing);
t('未知錯誤,請稍後再試!');
}
});
return false;//防止dialog 自動關閉
});
2. 很明顯,頁面裡面需要獲取檔案資訊,後臺處理程式碼(PHP)
$apkConfig = $this->_getApkConfig();
$params = $this->getFilteredParam('get');
$subFile = $_FILES['apkToolFiles'];
$apkName = $apkInfoHtml = "";
if(empty($subFile))
{
$this->ajaxReturn(array('status' => -4, 'info' => '請選擇要上傳的檔案'));
}
foreach ($subFile['name'] as $subKey => $subVal)
{