我遇到了一個問題。我需要使用 Delphi 將檔案(CSV 檔案)上傳到服務器。服務器有一些必須遵守的要求:
- 該請求必須是 HTTP PUT 請求。
- 必須在 URL 請求中計算客戶端 ID,如下所示:example.com/upload/{Client ID}({Client ID} 將被替換)。
- 必須包含將在客戶端 ID 之后的 URL 中也接收到的未來檔案名,如下所示:example.com/upload/{Client ID}/{Future File Name}({Future File Name} 將被替換),其中可以與您的本地檔案名不同。
- API Key 必須在請求標頭中(標頭名稱:x-api-key)。示例:lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr。
我可以在 CURL 中執行此操作,例如以下示例:(客戶端 ID:d32krpq,未來檔案名:20181023_update.csv)
curl -v -X PUT https://example.com/upload/d32krpq/20181023_update.csv --upload-file 20181023_update.csv --header "x-api-key: lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr"
如何在 Delphi 組件中實作這一點?(在任一TNetHttpClient或TRESTClient)。
uj5u.com熱心網友回復:
在 Delphi 中,在兩個 HTTP 客戶端框架中都可以在“Put”請求中發送多個欄位(檔案、自定義標頭...):
在“TNetHTTPClient”中,通過“Put”方法,您可以使用多載函式function function 與本地檔案路徑的字串或“TMultipartFormData”物件(如果要包含許多檔案和其他欄位)。在函式的“TNetHeaders”物件的可選引數中,您可以指定您的自定義標頭引數。“TNetHeaders”是“TNameValuePair”記錄的動態陣列。因此,您必須創建“TNameValuePair”的動態陣列,然后使用您的 API 密鑰創建“TNameValuePair”記錄的實體并將其添加到動態陣列中。除了在“TNetHTTPClient”中您必須直接在您的 URL 請求中指定 URL 段引數。最后,你稱之為“Put”
procedure TForm1.PutFile;
var
LHTTP: TNetHTTPClient;
LHeaders: array of TNameValuePair;
begin
SetLength(LHeaders, 1);
LHeaders[0] := TNameValuePair.Create('x-api-key', 'lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr');
LHTTP := TNetHTTPClient.Create(nil);
try
LHTTP.Put('https://example.com/upload/d32krpq/20181023_update.csv', 'C:/MyFile.csv', nil, LHeaders);
finally
LHTTP.Free;
end;
end;
對于 REST 客戶端庫,您可以簡單地使用 TRESTRequest“AddFile”函式添加檔案,并且可以使用“AddParameter”添加任何自定義欄位作為正文、URL 段或標頭引數。TRESTClient 的另一個優點是您可以使用基本 URL 或定義 URL 段的資源,例如“example.com/upload/{Client ID}/{Future File Name}”。將組件“TRESTClient”、“TRESTRequest”和“TRESTResponse”拖放到表單上,將“TRESTClient”BaseURL 設定為您的上傳服務器,然后撰寫您的代碼。就像在這個例子中一樣:
procedure TForm1.PutFile;
begin
try
try
RESTRequest1.Method := TRESTRequestMethod.rmPUT;
RESTRequest1.AddFile('File1', 'C:\MyFile.csv', TRESTContentType.ctTEXT_CSV);
// Adding the parameters to be included in the URL
RESTRequest1.AddField('Client ID', 'd32krpq', pkURLSEGMENT);
RESTRequest1.AddField('Future File Name', '20181023_update.csv', pkURLSEGMENT);
// Adding a header parameter
RESTRequest1.AddField('x-api-key', 'lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr', pkHTTPHeader);
RESTRequest1.Execute;
except
ShowMessage('Uploading failed');
end;
finally
ShowMessage(RESTRequest1.Response.Content); // here you can see your server's response
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/527485.html
標籤:http德尔福
