2013-07-09 45 views
0

在Delphi XE2,我想備忘錄的線條與IdHTTP.Put上傳到一個文件在我的網站空間:IdHTTP.Put錯誤:HTTP/1.1405不允許的方法

procedure TForm1.btnUploadClick(Sender: TObject); 
var 
    StringToUpload: TStringStream; 
begin 
    StringToUpload := TStringStream.Create(''); 
    try 
    StringToUpload.WriteString(memo.Lines.Text); 
    // Error: HTTP/1.1 405 Method Not Allowed. 
    IdHTTP1.Put(edtOnlineFile.Text, StringToUpload); 
    finally 
    StringToUpload.Free; 
    end; 
end; 

但我總是得到此錯誤消息:

enter image description here

所以我必須做什麼,以避免錯誤並進行上傳?

+0

看到http://stackoverflow.com/questions/17546558/ 「豔記它是如何工作的,做同樣的」 –

+0

「中Request-Line中指定的方法是不允許進行標識的資源答案通過Request-URI。響應必須包含一個允許頭部,其中包含請求資源的有效方法列表。「 – OnTheFly

回答

3

這意味着HTTP服務器不支持該URL上的PUT方法(如果有的話)。對此你無能爲力。您可能需要以其他方式上傳數據,通常涉及POST,或者使用完全不同的協議,如FTP。

BTW,使用TStringStream這樣的時候,不要忘了復位Position如果使用WriteString()方法:

StringToUpload.WriteString(memo.Lines.Text); 
StringToUpload.Position := 0; 

否則,使用構造函數來代替:

StringToUpload := TStringStream.Create(memo.Lines.Text); 
+0

感謝您的提示 - 我現在使用FTP。你會用什麼? (該字符串的長度可能在300 - 3000字節之間)。 – user1580348

+1

這不是我選擇使用的問題,而是服務器實際支持的內容。 –

0

感謝上面的代碼,這裏可能是更多的信息與一個小幫助函數來協助這個Stream構造函數,我發現它適用於任何你通過的字符串,即使它包含二進制的東西。

//Helper function to make JSON string correct for processing with POST/GET 
    function StringToStream(const AString: string): TStream; 
    begin 
    Result := TStringStream.Create(AString); 
    end; 

//somewhere in your code, I am posting to Spring REST, encoding must be utf-8 
IdHTTP1.Request.ContentType := 'application/json'; //very important 
IdHTTP1.Request.ContentEncoding := 'utf-8'; //which encoding? 
response := IdHTTP1.Put(URL, StringToStream(body)); //response,URL,body are declared as String