Thêm phương tiện với WP-Rest-API v2


10

Tôi cần sự giúp đỡ của bạn để tải lên một hình ảnh phương tiện trong blog wordpress của tôi thông qua xác thực Wp-rest-api v2 và Oauth2.

Tôi không tìm thấy trong tài liệu API REST cách gửi dữ liệu hình ảnh của mình (tên trường, chế độ gửi ...?).

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

Phản hồi :

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
)

Bất kỳ ý tưởng? Cảm ơn rất nhiều


Tôi đã thêm mã hóa từ nhận xét của bạn vào câu hỏi. Hãy nhớ rằng bạn có thể chỉnh sửa câu hỏi bất cứ lúc nào để thêm thông tin hoặc làm cho nó rõ ràng hơn.
cybmeta

Các phụ ;trong wordpress.local/wp-json/wp/v2/media";là một nhập nhầm đây hoặc nó là trong mã thực sự của bạn quá?
cybmeta

Theo tài liệu , WP REST API v2 yêu cầu plugin OAuth này . Tôi không biết thư viện mà bạn đang sử dụng (OAuth2 / Client.php) có tương thích với WP REST API hay không, nhưng có lẽ là không.
cybmeta

Cảm ơn rất nhiều! Thêm ->; không có trong mã thực sự của tôi! Tôi sử dụng plugin OAuth chính thức để xác thực tôi, các tệp OAuth2.Client.php chỉ là thư viện để thực hiện các yêu cầu curl dễ dàng
kain34440

Có một phần Tạo phương tiện trong (tài liệu) [ v2.wp-api.org/reference/media/] . Tôi nghĩ bạn source_urlnên ở trong postđối tượng.
ville6000

Câu trả lời:


8

VÌ THẾ! Đây là niềm vui

Hãy nhớ rằng WP-API vẫn đang trong quá trình hoàn thiện.

Bố trí nội dung

Tôi đã tìm thấy một vấn đề được báo cáo trong hàng đợi vấn đề WP-API về Xử lý nội dung. Đây là một tiêu đề bắt buộc để đăng nội dung phương tiện mới và có một số yêu cầu rất, rất nghiêm ngặt khi cung cấp nội dung này ở định dạng phù hợp.

Mục đích tạo điểm cuối truyền thông

Đầu tiên, chúng ta hãy lùi lại một bước. API giả định tại thời điểm này bạn đã tải lên một tệp mới vào đúng thư mục. Điểm cuối này đang tạo nội dung đa phương tiện trong cơ sở dữ liệu tham chiếu tệp này.

Giải pháp

Bạn phải chỉ định tên tệp của tệp phương tiện để liên kết với nội dung mới của bạn. Đây không thể là một url từ xa. Như bạn có thể nhìn thấy từ tài liệu v2 , source_urllinklà read-only. Tất cả những gì bạn phải làm để gửi thành công nội dung mới của bạn là thêm phần sau vào tiêu đề của bạn:

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

Như đã đề cập trong vé, bạn không thể thêm dấu ngoặc kép hoặc chỉ định phương thức bạn đang sử dụng để gửi tệp. Nó phải ở định dạng trên. Ít nhất, đây là trường hợp cho đến khi họ thay đổi tất cả xung quanh.

Đảm bảo loại tệp là một trong những loại tệp được chấp nhận và bạn bao gồm phần mở rộng của tệp được bao gồm trong yêu cầu. Cảm ơn Tiến sĩ Deo trong các ý kiến.

Đối với hồ sơ, tôi đã cười với niềm vui thích khi cuối cùng tôi đã tìm ra điều này ... sợ vợ tôi ra khỏi địa ngục.


1
Thx lớn cho các gợi ý với Content-Disposition!
pHiL

Tôi nghĩ rằng câu trả lời này chỉ là một gợi ý, và không phải là một giải pháp hoàn chỉnh. Tôi đang làm theo lời khuyên này và tôi nhận được lỗiSorry, this file type is not permitted for security reasons
Brethlosze

@Brethlosze Nghe có vẻ như là một vấn đề không liên quan. WordPress chặn một số loại phương tiện truyền thông trong quá trình tải lên bình thường.
MikeNGarrett

3
@Brethlosze phần mở rộng tập tin cần phải là một trong những loại được chấp nhận. Ví dụ: cái này hoạt động 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" --locationnhưng nếu bạn bỏ qua pngtên tệp tmp.png, bạn sẽ nhận đượcerror sorry, this file type is not permitted for security reasons
Dr Deo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.