Ich benötige Ihre Hilfe, um ein Medienbild in meinen WordPress-Blog über die Wp-rest-api v2- und Oauth2-Authentifizierung hochzuladen.
Ich habe in der REST-API-Dokumentation nicht gefunden, wie meine Bilddaten gesendet werden sollen (Feldname, Sendemodus ...?).
require('OAuth2/Client.php');
require('OAuth2/GrantType/IGrantType.php');
require('OAuth2/GrantType/AuthorizationCode.php');
const CLIENT_ID = 'XXX';
const CLIENT_SECRET = 'XX';
const REDIRECT_URI = 'http://127.0.0.1/test_api_wp/test.php';
const AUTHORIZATION_ENDPOINT = 'http://wordpress.local/oauth/authorize';
const TOKEN_ENDPOINT = 'http://wordpress.local/oauth/token';
$client = new OAuth2\Client(CLIENT_ID, CLIENT_SECRET);
if (!isset($_GET['code']))
{
$auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
header('Location: ' . $auth_url);
die('Redirect');
}
else
{
$params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
$response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params); //authorization_code
$token = $response['result']['access_token'];
$client->setAccessToken($token);
$client->setAccessTokenType(OAuth2\Client::ACCESS_TOKEN_BEARER);
}
$values = array(
"date" => "2015-11-26 10:00:00",
"date_gmt" => "2015-11-26 09:00:00",
"modified" => "2015-11-26 10:00:00",
"modified_gmt" => "2015-11-26 09:00:00",
"status" => "future",
"title" => "Titre media",
"description" => "description media",
"media_type" => "image",
"source_url" => "https://www.base64-image.de/build/img/mr-base64-482fa1f767.png"
);
$data = $client->fetch("wordpress.local/wp-json/wp/v2/media", $values, "POST");
echo "<pre>";print_r($data);echo "</pre>";
Die Antwort :
Array
(
[result] => Array
(
[code] => rest_upload_no_data
[message] => No data supplied
[data] => Array
(
[status] => 400
)
)
[code] => 400
[content_type] => application/json; charset=UTF-8
)
Irgendeine Idee? Danke vielmals
;
inwordpress.local/wp-json/wp/v2/media";
ist hier ein Fehler oder ist es auch in Ihrem echten Code?source_url
solltest impost
Objekt sein.Antworten:
SO! Das macht Spaß.
Denken Sie daran, dass die WP-API noch sehr, sehr in Arbeit ist.
Inhaltsdisposition
Ich habe ein Problem in der WP-API-Problemwarteschlange bezüglich Content-Disposition gefunden. Dies ist ein erforderlicher Header für die Veröffentlichung neuer Medieninhalte, und es gibt einige sehr, sehr strenge Anforderungen, wenn es darum geht, diese im richtigen Format bereitzustellen.
Der Zweck des Erstellens eines Medienendpunkts
Lassen Sie uns zunächst einen Schritt zurücktreten. Die API geht davon aus, dass Sie zu diesem Zeitpunkt bereits eine neue Datei in das richtige Verzeichnis hochgeladen haben. Dieser Endpunkt erstellt den Medieninhalt in der Datenbank, die auf diese Datei verweist.
Die Lösung
Sie müssen den Dateinamen der Mediendatei angeben, die Ihrem neuen Inhalt zugeordnet werden soll. Dies kann keine Remote-URL sein. Wie können Sie von der siehe v2 Dokumentation ,
source_url
undlink
sind schreibgeschützt. Alles, was Sie tun müssen, um Ihren neuen Inhalt erfolgreich einzureichen, ist Folgendes zu Ihrem Header hinzuzufügen:Wie im Ticket erwähnt, können Sie keine Anführungszeichen hinzufügen oder die Methode angeben, mit der Sie die Datei senden. Es muss im obigen Format vorliegen. Zumindest ist dies der Fall, bis sie es rundum ändern.
Stellen Sie sicher, dass der Dateityp einer der akzeptierten Dateitypen ist und Sie die Erweiterung der Datei in die Anforderung aufnehmen. Vielen Dank an Dr. Deo in den Kommentaren.
Fürs Protokoll, ich lachte vor schwindelerregender Freude, als ich es endlich herausfand ... erschreckte meine Frau zum Teufel.
quelle
Content-Disposition
!Sorry, this file type is not permitted for security reasons
curl --request POST --url http://localhost/kayinjaproject/wp-json/wp/v2/media --header "cache-control: no-cache" --header "content-disposition: attachment; filename=tmp.png" --header "authorization: Basic cm9vdDppYW1haGVybw==" --header "content-type: image/png" --data-binary "@c:/gnu/png.png" --location
aber wenn Siepng
den Dateinamen weglassentmp.png
, erhalten Sieerror sorry, this file type is not permitted for security reasons
Informationen zum "Querverweis" finden Sie in meiner entsprechenden Antwort hier auf StackOverflow zum Hochladen von Medien und zur Verwendung dieser Medien als "vorgestellte Medien" für einen Beitrag.
quelle