TIWFileUploader 是基於 Ajax 的上傳控件, 最初是 Andrew Valums 開發, 從 IntraWeb XIV 納入並替換 TIWFile.
雖然從組件面板上還能看到 TIWFile, 官方說已不能使用.
現在的 TIWFileUploader 非常方便, 能拖拽上傳, 能批量上傳, 會自動顯示上傳進度, 界面也可以很漂亮.
我測試拖拽上傳時, 發現有些浏覽器不支持.
property MaxFileSize: Int64 //文件最大許可, 默認 20971520(20MB); 如果為 0, 則表示沒有最大限制 property MinFileSize: Int64 //文件最小許可, 默認 0, 表示沒有最小限制 property Multiple: Boolean //是否支持多個文件同時上傳, 默認 False property AutoHideListTime: Cardinal //上傳後等待多少毫秒既隱藏上傳列表; 默認 0, 表示不隱藏. property TextStrings: TIWFileUploaderTextStrings //這包含 12 項信息文本, 可以通過它徹底地本地化 property Style: TIWFileUploaderStyle //它包含 7 個子選項, 可設置各種狀態下的樣式, 能弄得很漂亮 property AllowedExtensions: string //支持上傳的文件類型, 多種類型用逗號分割, 如: rar,zip,pdf,mp3; 默認為空, 表示支持任何文件 property AutoSave: Boolean //上傳完成後是否自動保存到 AutoSavePath 指示的文件夾 property AutoSavePath: string //用於自動保存的文件夾, 如果不存在會創建; 如果出錯會保存在用戶的緩存文件夾 property OverwriteExisting: Boolean //是否覆蓋同名文件, 默認 True; False 時遇同名會引發異常 property DisableCancel: Boolean //在上傳過程中, 是否禁用"取消", 默認 False property FileList: THttpFileList //? property AcceptFiles: string //? property OnAsyncUploadCompleted: TUploadCompleteEvent //該事件在上傳完畢後自動保存前觸發; 可以在該事件中更改路徑或文件名, 甚至取消保存 property OnAsyncUploadSuccess: TIWAsyncEvent //成功完成後 property OnAsyncUploadError: TIWAsyncEvent //出錯時 {下面三個保存方法都應該用在 OnAsyncUploadCompleted 中} function SaveAll(APathname: string; AOverwrite: Boolean) //如果還是使用源文件名, 應該用這個 function SaveToFile(ASourceFileName: string; ADestFileName: TFileName; AOverwrite: Boolean) //假如要更改文件名, 用這個 function SaveToStream(ASourceFileName: string; AStream: TStream) // procedure NotifyUploadCompleted //
uses ServerController; procedure TIWForm1.IWAppFormCreate(Sender: TObject); begin IWFileUploader1.MaxFileSize := 0; //不限制大文件 IWFileUploader1.Multiple := True; //可以同時上傳多個文件 IWFileUploader1.AutoSave := True; //自動保存 IWFileUploader1.AutoSavePath := IWServerController.ContentPath; //這是 wwwroot, 需要修改文件夾屬性, 可寫才行 end;
uses ServerController; procedure TIWForm1.IWAppFormCreate(Sender: TObject); begin IWFileUploader1.MaxFileSize := 0; IWFileUploader1.Multiple := True; IWFileUploader1.AutoSavePath := IWServerController.ContentPath; end; //OnUploadCompleted 的參數解釋: //DestPath 同 AutoSavePath //FileName 同源文件名 //SaveFile 它會是 True, //Overwrite 同 OverwriteExisting procedure TIWForm1.IWFileUploader1AsyncUploadCompleted(Sender: TObject; var DestPath, FileName: string; var SaveFile, Overwrite: Boolean); begin IWFileUploader1.SaveAll(DestPath, Overwrite); SaveFile := False; //如果前面設置了自動保存, 就取消它 end;