Cara mengirim file ke Drupal 8 melalui REST

9

Saya dapat membuat artikel melalui RESTtanpa masalah. Tapi saya tidak tahu bagaimana cara mengirim file.

Bagaimana cara mengirim file (gambar) ke Drupal 8 via REST?

Memperbarui:

REST UI - File: /file/{id}

Example image added in article: 
/admin/content/files -> /admin/content/files/usage/1

file {id} = 1?

Get file id 1:

curl --request GET --user admin:admin --header 'Accept: application/hal+json' http://d8.local/file/1
A fatal error occurred: No route found for "GET /file/1"

Posting gambar (tanpa konten entitas):

curl --request POST --user admin:admin --header 'Content-type: application/hal+json' http://d8.local/entity/file
{"error":"No entity content received."}

Saya tidak dapat menemukan cara membuat entity content.

pengguna32063
sumber
Sepertinya ada beberapa pemblokir untuk file POSTing. Salah satunya adalah pengkodean file base64 ( tambalan drupal.org/node/1927648 tersedia) dan yang lainnya adalah izin titik akhir REST untuk Buat Perbarui Hapus ( tambalan drupal.org/node/2310307 tersedia). Saya belum menguji salah satu dari ini.
Queenvictoria

Jawaban:

4
  • Terapkan tambalan ke inti: https://www.drupal.org/node/1927648
  • Instal Rest UI menggunakan: drush dl restui-8.x-1.x
  • Buka / admin / config / services / rest dan aktifkan File /entity/file/{file}
  • Di bawah / admin / orang / izin atur semua izin yang diperlukan
  • Pastikan folder file ada dan memiliki izin yang tepat
  • Menyandikan gambar menggunakan alat perintah base64
  • POST ke drupal.url / entitas / file /

    {"_links":
    {
      "type":{"href":"http://drupal.url/rest/type/file/file"}
    },
      "filename":[{"value":"input.jpg"}],
      "filemime":[{"value":"image/jpeg"}],
      "data":[{"value":"insert-output-from-base64-here"}] }

    masukkan deskripsi gambar di sini

kardinal
sumber
Saat mengunggah file dengan sukses, Anda mendapatkan 201, tetapi tidak ada yang dikembalikan berkaitan dengan di mana file tersebut. Saya mengharapkan ID atau lokasi file dikembalikan. Bagaimana kami mereferensikan file setelah diunggah?
Ronnie
Saya memodifikasi EntityResource.phpberdasarkan patch dan jalur 117 Anda, saya mengembalikan ID entitas dan sekarang saya setidaknya memiliki referensi seperti itu:$response = new ResourceResponse(NULL, 201,['id' => $entity->id()]);
Ronnie
@ Connie Berdasarkan jawabannya, saya berharap file tersebut berada di folder file situs Anda.
Blake Frederick
1
@BlakeFrederick Itu tidak benar-benar membantu saya jika saya perlu menyimpan referensi ke file dalam database. Pikirkan skenario ini: Saya memiliki tipe konten bidang gambar. Gambar harus dikaitkan dengan simpul itu saat dibuat. Saat Anda mengunggah file, tidak ada yang dikembalikan kecuali 201 ... apa yang harus saya berikan simpul itu untuk menunjuk ke gambar? Itu sebabnya saya menambahkan $entity->id()respons. Saya meneruskan id entitas ke simpul dan sekarang simpul itu tahu tentang gambar
Ronnie
@ Connie - Saya sendiri sedang mengerjakan ini, tapi saya perhatikan bahwa ketika file berhasil ditransmisikan server, baris yang sesuai ditambahkan ke file_managedtabel Drupal . Baris ini memiliki keunikan fid. Saya percaya langkah selanjutnya adalah POST pembuatan node baru dengan bidang gambar dan gunakan fiduntuk mengaitkan bidang gambar dengan file. Jika saya mengerti Anda, pertanyaannya adalah bagaimana menentukan fidkapan tidak ada yang dikembalikan. Saya perhatikan dari utas Drupal hari ini bahwa versi masa depan REST UI akan mengembalikan entitas penuh, tapi saya tidak yakin bagaimana menyelesaikan masalah ini untuk saat ini.
Blake Frederick
1
  1. Instal dan aktifkan modul RestUi dan File Entity .
  2. Goto 'admin / config / services / rest' dan aktifkan File Resource dengan metode posting bersama dengan format json dan hal_json
  3. Aktifkan izin pos Akses POST pada Sumber daya file @ admin / orang / izin
  4. Posting url - http: //d8.local/entity/file? _Format = hal_json
  5. Berikut format data pos (gunakan encoder base64 untuk data gambar)

    { "_links": { "type": { "href": "http://d8.local/rest/type/file/image" } }, "filename": [ { "value": "favicon-32x32.png" } ], "filemime": [ { "value": "image/png" } ], "filesize": [ { "value": "488" } ], "type": [ { "target_id": "image" } ], "data": [ { "value": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAkUExURUxpcSOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4U0m8UcAAAAMdFJOUwD/EvAm2qhTPMRrkl4CMYAAAAE1SURBVCjPXZG/S8NQEMePR7Ehnb48khC7BEFFnYJD6/aWOLilVBy6WBVc648/oCii1KlFKDrFwV2tqH+edy9Rk7zh8e7Dfe++944oP5dUO59RDQyPqrFK/WqKCzxUwA30oJyymervlVK8PsVBOd85hh6pyflfhwXg024cjguwBqCjhsCsSOAn+k4MBGpUWAB6Tb6W1VxAgv+MfcPgWUBgazjxoYwlQLrsmBa6MhbH3hep2yu6QJuowWL9Yfs1U4QRSbWOjRts0DMCdEbqjl8s1kYkPqmX7YGRfgy4aJe2IB+0wZJI2s7ojEGbWtJejL1aL55h+wGDVWTWix47+cAug6kAycjs+LkkjFzku0h6dC3D01KxCmdOLrt7pyQ0+Z/tRXT/eEr0dvL7y6zkrbhPtYVPrOAHKZQ53IyepQMAAAAASUVORK5CYII=" } ] }

  6. Set Otorisasi, Content-Type in header. (Otorisasi: Basic xxxxxxxx Content-Type: application / hal + json)

  7. Gunakan php curl berikut

    $curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => "http://d8.local/entity/file?_format=hal_json",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "{\n  \"_links\": {\n    \"type\": {\n      \"href\": \"http://d8.local/rest/type/file/image\"\n    }\n  },\n  \"filename\": [\n    {\n      \"value\": \"favicon-32x32.png\"\n    }\n  ],\n  \"filemime\": [\n    {\n      \"value\": \"image/png\"\n    }\n  ],\n  \"filesize\": [\n    {\n      \"value\": \"488\"\n    }\n  ],\n  \"type\": [\n    {\n      \"target_id\": \"image\"\n    }\n  ],\n  \"data\": [\n    {\n      \"value\": \"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAkUExURUxpcSOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4SOq4U0m8UcAAAAMdFJOUwD/EvAm2qhTPMRrkl4CMYAAAAE1SURBVCjPXZG/S8NQEMePR7Ehnb48khC7BEFFnYJD6/aWOLilVBy6WBVc648/oCii1KlFKDrFwV2tqH+edy9Rk7zh8e7Dfe++944oP5dUO59RDQyPqrFK/WqKCzxUwA30oJyymervlVK8PsVBOd85hh6pyflfhwXg024cjguwBqCjhsCsSOAn+k4MBGpUWAB6Tb6W1VxAgv+MfcPgWUBgazjxoYwlQLrsmBa6MhbH3hep2yu6QJuowWL9Yfs1U4QRSbWOjRts0DMCdEbqjl8s1kYkPqmX7YGRfgy4aJe2IB+0wZJI2s7ojEGbWtJejL1aL55h+wGDVWTWix47+cAug6kAycjs+LkkjFzku0h6dC3D01KxCmdOLrt7pyQ0+Z/tRXT/eEr0dvL7y6zkrbhPtYVPrOAHKZQ53IyepQMAAAAASUVORK5CYII=\"\n    }\n  ]\n}",
      CURLOPT_HTTPHEADER => array(
        "authorization: Basic " .base64_encode('User:Password'),
        "cache-control: no-cache",
        "content-type: application/hal+json"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
  8. Buka dan periksa file di sini - admin / konten / file

Krishna Kanth
sumber
0

Anda dapat menginstal modul UI REST untuk melihat titik akhir apa yang dapat Anda gunakan.

Antarmuka pengguna yang sangat mendasar untuk modul REST Drupal 8.

Karena juga memungkinkan Anda mengkonfigurasi sumber daya apa yang terpapar oleh otentikasi apa.

Harap perhatikan bahwa UI saat ini memberikan titik akhir yang salah: - REST jalur URI berubah menjadi jalur kanonik

Clemens Tolboom
sumber
Istirahat titik akhir UI untuk file: / file / {id}. Saya telah memperbarui pertanyaan.
user32063