翻譯|使用教程|編輯:況魚杰|2019-07-18 17:03:41.623|閱讀 560 次
概述:本教程將會介紹如何從位于Server運行目錄中的文件夾中發送小文件,通過這種方法,就可以控制從服務器訪問文件的類型。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
RealThinClient SDK是用于開發標準的HTTP(S)服務器,ISAPI擴展以及客戶端的VCL控件。可用于Windows下的CodeGear Delphi 6-2010。關于RealThinClient SDK的教程會持續更新,本節是RealThinClient SDK的第四課,如何從服務器發送小文件。
本教程將會介紹如何從位于Server運行目錄中的文件夾中發送小文件,通過這種方法,就可以控制從服務器訪問文件的類型,我們將使用一些函數來保護我們的服務器并檢查內容(在這種情況下的文件大小)是否足夠小以便發送。在下一課中,我們將會了解如何處理更大一些的文件。
接下來看看具體的操作步驟(文章中會使用到第三課的代碼,點擊獲取):
從第三課加載項目。
將RtcDataProvider組件添加到項目中。
我們必須在Form1中添加一個新的RtcDataProvider組件,以便獲得任何不是我們之前在項目中放入的rdpTime或rdpSquare組件的請求。
為我們的RtcDataProvider組件設置服務器屬性。
與我們之前的組件一樣,我們必須告訴我們的新組件服務器組件將使用哪個來檢查請求。
為RtcDataProvider組件設置CheckOrder屬性。
我們必須為rdpFiles組件設置CheckOrder屬性,以使其成為來自RtcHttpServer1組件的Request(OnCheckRequest事件)的最后一個屬性。如果我們查看以前的組件,它們的CheckOrder屬性中的值都為0(零),為了確保我們的新RtcDataProvider組件是檢查請求的最后一個組件,我們將它的CheckOrder設置為900。CheckOrder屬性是訂單,其中將要求組件處理請求,與連接到同一服務器的其他組件相比,此訂單號越小,組件將被要求處理請求越快。
添加一個功能以檢查文件位置。
我們將創建一個函數來檢查文件位置以及文件是否存在。
function TForm1.GetFullFileName(psFileName: string): string; var vsDocRoot : string; //(1) begin vsDocRoot := ExtractFilePath(ParamStr(0)); //(2) if Copy(vsDocRoot, Length(vsDocRoot), 1) = '\' then Delete(vsDocRoot, Length(vsDocRoot), 1); //(3) vsDocRoot := vsDocRoot + '\data'; //(4) psFileName := StringReplace(psFileName, '/', '\', [rfreplaceall]); //(5) psFileName := StringReplace(psFileName, '%20', ' ', [rfreplaceall]); Result := ExpandFileName(Trim(vsDocRoot) + Trim(psFileName)); //(6) if (AnsiPos('\..', Result) > 0) or //(7) (UpperCase(Copy(Result, 1, Length(vsDocRoot))) <> UpperCase(vsDocRoot)) then Result := ''; end;
我們在做什么?
為我們的RtcDataProvider組件配置OnCheckRequest事件。
procedure TForm1.rdpFilesCheckRequest(Sender: TRtcConnection); var vsFileName : string; //(1) begin with TRtcDataServer(Sender) do //(2) begin vsFileName := GetFullFileName(Request.FileName); //(3) Accept; Request.Info['FName'] := vsFileName; //(4) end; end;
我們在做什么?
請記住,在步驟4中,我們將RtcDataProvider組件的CheckOrder屬性設置為900,那么,現在發生的是其他兩個RtcDataProvider組件將其CheckOrder屬性設置為0,因此這兩個組件將首先檢查Request,在檢查Request之后,我們的rdpFiles組件將檢查Request并發送任何除/ TIME和/ SQUARE的文件。
為我們的RtcDataProvider組件配置OnDataReceived事件。
一旦我們的RtcDataProvider組件接受了Request,我們就會看看是否會發回消息文件。
procedure TForm1.rdpFilesDataReceived(Sender: TRtcConnection); var vsFileName : string; //(1) viFileSize : integer; begin with TRtcDataServer(Sender) do //(2) if Request.Complete then begin vsFileName := Request.Info['FName']; //(3) if File_Exists(vsFileName) then //(4) begin viFileSize := File_Size(vsFileName); //(5) if (viFileSize <= 2048) then Write(Read_File(vsFileName)) //(6) else Write('File Too Long to be served: ' + IntToStr(viFileSize) + ' bytes'); //(7) end else Write('File not found on server: ' + Request.Info['FName']); //(8) end; end;
我們在做什么?
創建目錄并添加幾個文件。
我們必須創建一個目錄來保存我們將為請求發送的文件,該目錄必須稱為/ data(參見步驟5)。
接下來,我們可以在要提供的“/ data”目錄中復制或創建一些文件。出于這個例子的目的,我在這個目錄中放了兩個文件,一個TXT和一個EXE文件。EXE文件大于2048字節,因此我們可以看到文件大小錯誤。
編譯并運行項目。
當沒有要提供的文件時:
文件太大時:
正常時:
關注慧聚IT微信公眾號 ???,了解產品的最新動態及最新資訊。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: