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_url이 post물건 안에 있어야 한다고 생각합니다 .
— ville6000

답변:


8

그래서! 이 재미.

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

내용 처리

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

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

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

해결책

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

'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.