Plupload 這個上傳器,我想應該不會很陌生吧(應該)。他有一個很微妙的錯誤。
請看上傳端 PHP 處理的這個部份:
// Make sure the fileName is unique but only if chunking is disabled
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;
}
這次會遇到這個東西,是因為在大量且多人環境下,使用 Plupload 上傳時,會發現檔案被莫名覆蓋,而導致使用者端出現異常。雖然這種命名重複的老梗瞬間就解決了,不過還是紀錄一下。
前端可以這樣做:
var uploader = new plupload.Uploader({
// 設定就略過囉
});
/**
* 在檔案加入後,開始上傳之前,我們將檔名動點手腳。
*/
uploader.bind('BeforeUpload', function(up, files) {
files.name = files.id + '-' + files.name;
});
/**
* 在檔案上傳結束後,由於前端會顯示檔案名稱,所以必須把動手腳的檔名換回來。
*/
uploader.bind('BeforeUpload', function(up, files, response) {
files.name = files.name.replace(files.id + '-', '');