/ PHP

[Plupload note.] 微妙的錯誤

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 + '-', '');