0

在 Delphi XE2 中,我正在尝试使用 IdHTTP.Put 将备忘录的行上传到我的网络空间上的文件:

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;

但我总是收到此错误消息:

在此处输入图像描述

那么我必须怎么做才能避免错误并进行上传?

4

2 回答 2

3

这意味着 HTTP 服务器不支持该PUTURL 上的方法(如果有的话)。你对此无能为力。您可能不得不以另一种方式上传数据,通常涉及到POST,或完全不同的协议,如 FTP。

顺便说一句,当这样使用时,如果你使用该方法TStringStream,请不要忘记重置:PositionWriteString()

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

否则,请改用构造函数:

StringToUpload := TStringStream.Create(memo.Lines.Text);
于 2013-07-09T22:46:43.943 回答
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
于 2016-01-01T10:12:14.263 回答