通过 RESTClient 或 INDY 或任何其他方式将图像上传到 Delphi 10.4 中的 WordPress WP REST api
Uploading images to a WordPress WP REST api in Delphi 10.4 via RESTClient or INDY or any others
在 Delphi 10.4 中无法通过 REST api 将图像上传到我的 Wordpress 网站。
我通过 REST api(在 REST 调试器中和直接在程序中)发布了一个 post,但是没有图片就没有意义。
RESTClient 组件的最新代码:
procedure TForm1.Button1Click(Sender: TObject);
var jpgFoto: TMemoryStream;
begin
HTTPBasicAuthenticator1.Username := 'myuser';
HTTPBasicAuthenticator1.Password := 'mypass';
RESTRequest1.Method := TRESTRequestMethod.rmPOST;
RESTRequest1.Resource := 'wp/v2/media';
RESTClient1.BaseURL := 'https://*.ru/wp-json';
RESTRequest1.Params.AddHeader('Content-Disposition', 'attachment; filename="00s.jpg"');//I tried different options
RESTRequest1.Params.AddHeader('Content-Type', 'image/jpeg');//tried different types, for example multipart or without this line
RESTRequest1.Params.AddItem('data-binary', 'D:\Europe[=12=]s.jpg');//does it make sense?
RESTRequest1.Params[0].Kind := pkGETorPOST;
jpgFoto := TMemoryStream.Create;
jpgFoto.LoadFromFile('D:\Europe[=12=]s.jpg');
RESTRequest1.AddBody(jpgFoto, TRESTContentType.ctIMAGE_JPEG);
jpgFoto.Position := 0;
try
RESTRequest1.Execute;
except
memo1.Text := RESTResponse1.Content;
end;
jpgFoto.Free;
end;
引发异常:rest_upload_invalid_disposition、rest_upload_invalid_disposition 或 rest_upload_no_data(取决于我在 Header RESTRequest 中使用的设置)
我找到了一个 至少帮助了一个人:切换到 INDY 到 idHTTP 组件。但是没有细节。我无法通过基本身份验证方法登录。我在 IDHTTP.Request.Username 和 IDHTTP.Request.Password 中设置了参数,但收到了 Wordpress 的响应 - 403 Forbidden。填充参数的格式不明确,在 JSON 或只是 parameter = value.
我刚开始学习 REST,卡住了好几个小时。请不要留下麻烦,请使用 delphi REST 或 Indy 组件或任何其他工作方式帮助在 Wordpress api REST 中上传图像,我将非常感激
成功了:
var
Params: TIdMultipartFormDataStream;
begin
Params := TIdMultipartFormDataStream.Create;
Params.AddFormField('content-type','image/jpeg');
Params.AddFile('file', 'c:\images\sdsd.jpg', '');
idhttp2.Request.Accept := 'application/json; charset= UTF-8';
idhttp2.Request.Authentication := TIdBasicAuthentication.Create;
idhttp2.Request.Authentication.Username:= 'Username';
idhttp2.Request.Authentication.Password := 'Password';
idhttp2.Request.BasicAuthentication := true;
idhttp2.Request.ContentDisposition := 'form-data; filename="anyname.jpg"';//
idhttp2.Request.ContentType := 'application/json; charset= UTF-8';
try
idhttp2.Post('htts://mysite/wp-json/wp/v2/media/', Params);
except
memo1.Text := idhttp2.ResponseText;
end;
end;
在 Delphi 10.4 中无法通过 REST api 将图像上传到我的 Wordpress 网站。 我通过 REST api(在 REST 调试器中和直接在程序中)发布了一个 post,但是没有图片就没有意义。
RESTClient 组件的最新代码:
procedure TForm1.Button1Click(Sender: TObject);
var jpgFoto: TMemoryStream;
begin
HTTPBasicAuthenticator1.Username := 'myuser';
HTTPBasicAuthenticator1.Password := 'mypass';
RESTRequest1.Method := TRESTRequestMethod.rmPOST;
RESTRequest1.Resource := 'wp/v2/media';
RESTClient1.BaseURL := 'https://*.ru/wp-json';
RESTRequest1.Params.AddHeader('Content-Disposition', 'attachment; filename="00s.jpg"');//I tried different options
RESTRequest1.Params.AddHeader('Content-Type', 'image/jpeg');//tried different types, for example multipart or without this line
RESTRequest1.Params.AddItem('data-binary', 'D:\Europe[=12=]s.jpg');//does it make sense?
RESTRequest1.Params[0].Kind := pkGETorPOST;
jpgFoto := TMemoryStream.Create;
jpgFoto.LoadFromFile('D:\Europe[=12=]s.jpg');
RESTRequest1.AddBody(jpgFoto, TRESTContentType.ctIMAGE_JPEG);
jpgFoto.Position := 0;
try
RESTRequest1.Execute;
except
memo1.Text := RESTResponse1.Content;
end;
jpgFoto.Free;
end;
引发异常:rest_upload_invalid_disposition、rest_upload_invalid_disposition 或 rest_upload_no_data(取决于我在 Header RESTRequest 中使用的设置)
我找到了一个
我刚开始学习 REST,卡住了好几个小时。请不要留下麻烦,请使用 delphi REST 或 Indy 组件或任何其他工作方式帮助在 Wordpress api REST 中上传图像,我将非常感激
成功了:
var
Params: TIdMultipartFormDataStream;
begin
Params := TIdMultipartFormDataStream.Create;
Params.AddFormField('content-type','image/jpeg');
Params.AddFile('file', 'c:\images\sdsd.jpg', '');
idhttp2.Request.Accept := 'application/json; charset= UTF-8';
idhttp2.Request.Authentication := TIdBasicAuthentication.Create;
idhttp2.Request.Authentication.Username:= 'Username';
idhttp2.Request.Authentication.Password := 'Password';
idhttp2.Request.BasicAuthentication := true;
idhttp2.Request.ContentDisposition := 'form-data; filename="anyname.jpg"';//
idhttp2.Request.ContentType := 'application/json; charset= UTF-8';
try
idhttp2.Post('htts://mysite/wp-json/wp/v2/media/', Params);
except
memo1.Text := idhttp2.ResponseText;
end;
end;