2013-06-21 31 views
1

我有充當Web服務器並允許用戶將文件上傳到Web服務器的用戶之間的接口的程序。當用戶點擊「上傳」從列表視圖需要的信息,並將其發送到網站,第一http.Post是實際的文件,第二個是對元數據我保存它。您可以使用TIdHTTP將帖子發送至網站嗎?

當我註釋掉後的第一個語句,它工作正常,實際上職位數據,但它似乎並沒有得到任何的PARAMS爲第二個,當他們在那裏是兩者兼而有之。當我使用Param中的值在Web瀏覽器中運行腳本時,它也可以工作。

UFile是包含該文件的元數據的記錄。

IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create; 
    http := TIdHTTP.Create(nil); 
    http.IOHandler := IOHandler; 
    Param := TStringList.Create; 
    DataParams := TIdMultiPartFormDataStream.Create; 
    Stream := TStringStream.Create(''); 
    DebugStream := TStringStream.Create(''); 

    Param.Add('serial='+UFile.Serial); 
    Param.Add('filename='+UFile.Name); 
    Param.Add('filepath='+'\'+UFile.Serial+'\'+IntToStr(UFile.PatchID)); 
    Param.Add('patchid='+IntToStr(UFile.PatchID)); 
    Param.Add('patchnotes='+UFile.PatchNotes); 
    Param.Add('earliestversion='+UFile.EarliestVersion); 
    Param.Add('latestversion='+UFile.LatestVersion); 
    Param.Add('date='+DateToStr(UFile.Date)); 
    Param.Add('execaftersend='+BoolToStr(UFile.ExecAfterSend)); 

    DataParams.AddFile('file', UFile.FilePath, 'application/octet-stream'); 

    try 
    http.Post('http://example.com/postFile.php', DataParams, Stream); 
    ShowMessage(Stream.DataString); 
    http.Post('http://example.com/uploadFiles.php', Param, DebugStream); 
    ShowMessage(DebugStream.DataString); 
    for J := 0 to Pred(Param.Count) do 
     DebugStrings := DebugStrings + '&' + Param.Strings[J]; 
    ShowMessage(DebugStrings); 
    except 
    on E: EIdHTTPProtocolException do 
    begin 
     ShowMessage('Error code:' + IntToStr(E.ErrorCode)); 
    end 
    end; 
+0

你是什麼意思它「似乎並沒有得到任何的則params的」?服務器是否收到TCP連接?它是否收到給定URL的HTTP請求?你的程序會發生什麼? –

+0

@RobKennedy對於所有請求的參數,DebugStream.DataString都會返回「未定義變量在... ...等等」的錯誤。 – Aaron

+0

這似乎是一個PHP錯誤。如果有效,請通過瀏覽器查看。 –

回答

0

雖然這並不能真正解決這樣兩個職位的問題,它允許你上傳與其他數據的文件,這就是爲什麼我在做兩個職位開始。

使用TIdMultiPartFormDataStream並添加文件AddFile,並與AddFormField添加任何其它數據。

例子:

DataParams.AddFile('file', UFile.FilePath, 'application/octet-stream'); 
    DataParams.AddFormField('serial', UFile.Serial); 
    DataParams.AddFormField('filename', UFile.Name); 
相關問題