專案需求需要實現多檔案上傳功能,團隊選用了 SWFUpload 元件。官方下載地址為 https://swfupload.googlecode.com/,範例檔案為 SWFUpload-Samples v2.1.0.Release.zip。在解壓後的 \SWFUpload Samples v2.1.0\demos\applicationdemo.net 目錄下可找到對應的 ASP.NET 原始碼。

原始範例僅示範如何將縮略圖資訊儲存至 List 集合,並定義了 Thumbnail 類別。為了改善使用者體驗,我修改了部分原始碼流程:先讓編輯選擇圖片,確認無誤後再統一儲存。這樣若選錯檔案,可重新選擇而不必立即上傳。

// SWFUpload 設定重點
var swfu = new SWFUpload({
// ... 基本設定 ...
file_queue_limit: 10, // 限制佇列檔案數
file_size_limit: "10 MB", // 單檔大小上限
file_types: "*.jpg;*.png;*.gif", // 允許副檔名
file_types_description: "圖片檔案",
// 事件處理
file_queued_handler: onFileQueued,
file_queue_error_handler: onFileQueueError,
upload_start_handler: onUploadStart,
upload_progress_handler: onUploadProgress,
upload_success_handler: onUploadSuccess,
upload_complete_handler: onUploadComplete
});
// 檔案加入佇列時建立預覽元素
function onFileQueued(file) {
var previewHtml = '<div id="preview_' + file.id + '" class="preview-item">'
+ '<img src="' + getThumbnailUrl(file) + '" />'
+ '<span class="filename">' + file.name + '</span>'
+ '<span class="filesize">' + formatFileSize(file.size) + '</span>'
+ '<button onclick="removeFile(\'' + file.id + '\')">移除</button>'
+ '</div>';
$("#filePreviews").append(previewHtml);
updateTotalSize();
}
檔案大小顯示異常增大:若發現上傳後檔案體積比原檔大,請檢查伺服器端是否重複寫入、編碼轉換導致體積膨脹,或是縮略圖生成邏輯將原圖覆寫。建議在 upload_success_handler 中比對回傳的檔案大小與原始 file.size,並記錄日誌排查。
web.config maxRequestLength)