WP-Rest-API v2로 미디어 추가


10

Wp-rest-api v2 및 Oauth2 인증을 통해 워드 프레스 블로그에 미디어 이미지를 업로드하는 데 도움이 필요합니다.

REST API 설명서에서 이미지 데이터를 보내는 방법을 찾지 못했습니다 (필드 이름, 전송 모드 ...?).

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>";

응답 :

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
)

어떤 생각? 고마워


귀하의 의견을 코드로 작성하여 질문에 추가했습니다. 언제든지 질문을 편집하여 더 많은 정보를 추가하거나 더 명확하게 만들 수 있습니다.
cybmeta

여분 ;의는 wordpress.local/wp-json/wp/v2/media";여기에 잘못 입력을하거나 너무 실제 코드에?
cybmeta

docs 에 따르면 WP REST API v2에는 이 OAuth 플러그인이 필요 합니다 . 사용중인 라이브러리 (OAuth2 / Client.php)가 WP REST API와 호환되는지 여부는 알 수 없지만 아닐 수도 있습니다.
cybmeta

고마워요! 추가->; 내 실제 코드에 없습니다! 공식 OAuth 플러그인을 사용하여 인증합니다. 파일 OAuth2.Client.php는 컬 요청을 쉽게 할 수있는 라이브러리입니다
kain34440

(문서) [ v2.wp-api.org/reference/media/] 에 미디어 만들기 섹션이 있습니다. 나는 당신 source_urlpost물건 안에 있어야 한다고 생각합니다 .
ville6000

답변:


8

그래서! 이 재미.

WP-API는 여전히 진행중인 작업이라는 점을 명심하십시오.

내용 처리

내가 발견 WP-API 문제 큐에보고 된 문제 내용 - 처리에 대한합니다. 이것은 새로운 미디어 컨텐츠를 게시하는 데 필요한 헤더이며 올바른 형식으로 제공하기 위해서는 매우 엄격한 요구 사항이 있습니다.

미디어 엔드 포인트 생성의 목적

먼저 물러서 봅시다. API는이 시점에서 이미 새 파일을 올바른 디렉토리에 업로드했다고 가정합니다. 이 엔드 포인트가이 파일을 참조하는 데이터베이스에 매체 컨텐츠를 작성 중입니다.

해결책

새 컨텐츠와 연관 시키려면 미디어 파일의 파일 이름을 지정해야합니다. 원격 URL이 될 수 없습니다. 당신은에서 볼 수 있듯이 V2 문서 , source_urllink읽기 전용이다. 새 콘텐츠를 제출하려면 헤더에 다음을 추가하기 만하면됩니다.

'Content-Disposition' => 'filename=name-of-file.jpg',

티켓에서 언급했듯이 따옴표를 추가하거나 파일을 보내는 데 사용하는 방법을 지정할 수 없습니다. 그것은 해야한다 위의 형식으로. 적어도 그들이 모든 것을 바꿀 때까지 이것은 사실입니다.

파일 형식이 허용되는 파일 형식 중 하나이고 요청에 파일 확장명이 포함되어 있는지 확인하십시오 . 의견 에 Dr Deo 에게 감사드립니다 .

기록을 위해, 나는 이것을 마침내 알아낼 때 멍청한 기쁨으로 웃었다.


1
와 힌트를위한 큰 thx Content-Disposition!
pH :

이 답변은 힌트 일 뿐이며 완전한 솔루션이 아니라고 생각합니다. 이 조언을 따르고 있으며 오류가 발생했습니다Sorry, this file type is not permitted for security reasons
Brethlosze

@Brethlosze 관련이없는 문제인 것 같습니다. WordPress는 일반 업로드 프로세스에서 특정 유형의 미디어를 차단합니다.
MikeNGarrett 2016 년

3
@Brethlosze 파일 확장자는 허용되는 유형 중 하나 여야합니다. 예를 들어 이것이 작동 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하지만 png파일 이름에서 파일 을 생략하면 다음 과 같은 결과 tmp.png를 얻습니다error sorry, this file type is not permitted for security reasons
Dr Deo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.