Ich will das Thema nochmal aufmachen.
Ich habe immer noch Problem damit, über die API ein PDF in die Medien zu bekommen.
Ich kann aber über eine ähnliche Funktion, zum Beispiel zu einer Order ein PDF als Lieferschein zuweisen. Letztlich nutze ich fast die gleiche Funktion, nur ein anderen Endpunkt.
Erst mal das, was nicht funktioniert. Meine Funktion in Delphi:
FileStream := TFileStream.Create('J:\Rechnung_151866047.pdf', fmOpenRead);
try
SetLength(ByteArrayContent, FileStream.Size);
FileStream.ReadBuffer(ByteArrayContent[0], FileStream.Size);
finally
FileStream.Free;
end;
ByteStream := TBytesStream.Create(ByteArrayContent);
myRESTRequest.ResetToDefaults;
myRESTRequest.ClearBody;
myRESTRequest.Timeout := 300000;
myRESTClient.ResetToDefaults;
myRESTResponse.ResetToDefaults;
myRESTClient.BaseURL := 'https://meinedomain';
myRESTClient.Params.Clear;
myRESTRequest.AddAuthParameter('Authorization', 'Bearer ' + my_access_token, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
myRESTRequest.Method := TRESTRequestMethod.rmPOST;
myRESTRequest.Resource := '/api/_action/media/'+myMediaID+'/upload?extension=pdf&fileName='+TNetEncoding.URL.Encode('Rechnung_151866047');
Memo1.Lines.Add(myRESTRequest.Resource);
myRESTRequest.AddBody(ByteStream, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
try
myRESTRequest.Execute;
except
on e: exception do
begin
Memo1.Lines.Add('Execute: '+e.message);
end;
end;
Als Result erhalte ich immer:
{
"errors":[
{
"status":"404",
"code":"CONTENT__MEDIA_NOT_FOUND",
"title":"Not Found",
"detail":"Media for id 229250bb7b564d5fa0a9abe3a2f2d6d6 not found.",
"meta":{
"parameters":{
"mediaId":"229250bb7b564d5fa0a9abe3a2f2d6d6"
}
}
}
]
}
Ich habe eine ähnliche Funktion, die ein Dokument zu einer Order schickt. Und die funktioniert…
Ich habe keine Idee, warum das eine geht und das andere nicht.
FileStream := TFileStream.Create('S:\12345.pdf', fmOpenRead);
try
SetLength(ByteArrayContent, FileStream.Size);
FileStream.ReadBuffer(ByteArrayContent[0], FileStream.Size);
finally
FileStream.Free;
end;
ByteStream := TBytesStream.Create(ByteArrayContent);
myRESTRequest.ResetToDefaults;
myRESTRequest.Timeout := 300000;
myRESTClient.ResetToDefaults;
myRESTResponse.ResetToDefaults;
myRESTClient.BaseURL := BaseURL;
myRESTClient.Params.Clear;
myRESTRequest.AddAuthParameter('Authorization', 'Bearer ' + my_access_token, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
myRESTRequest.Method := TRESTRequestMethod.rmPOST;
myRESTRequest.Resource := '/api/_action/document/'+myDocumentID+'/upload?fileName=12345&extension=pdf';
Memo1.Lines.Add(myRESTRequest.Resource);
myRESTRequest.AddBody(ByteStream, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
try
myRESTRequest.Execute;
except on E: Exception do
begin
Memo1.Lines.Add(e.message);
end;
end;
Hat vielleicht noch jemand eine Idee, was das Problem ist ?
Grüße Holger