Je peux créer des articles via REST
sans problème. Mais je ne peux pas comprendre comment soumettre des fichiers.
Comment envoyer des fichiers (images) à Drupal 8 via REST
?
Mise à jour:
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"
Publier l'image (sans contenu d'entité):
curl --request POST --user admin:admin --header 'Content-type: application/hal+json' http://d8.local/entity/file
{"error":"No entity content received."}
Je ne peux pas savoir comment créer le fichier entity content
.
Réponses:
drush dl restui-8.x-1.x
/entity/file/{file}
POST vers drupal.url / entity / file /
la source
EntityResource.php
fonction de votre patch et de la ligne 117, j'ai retourné l'ID d'entité et j'ai maintenant au moins une référence de cette façon:$response = new ResourceResponse(NULL, 201,['id' => $entity->id()]);
$entity->id()
à la réponse. Je passe l'ID d'entité au nœud et maintenant ce nœud connaît l'imagefile_managed
table de Drupal . Cette ligne a un caractère uniquefid
. Je crois que l'étape suivante consiste à POSTER la création d'un nouveau nœud avec un champ d'image et à utiliser lefid
pour associer le champ d'image au fichier. Si je vous comprends bien, la question est de savoir comment déterminerfid
quand rien n'est retourné. J'ai remarqué aujourd'hui à partir d'un thread Drupal que la future version de l'interface utilisateur REST retournera l'entité complète, mais je ne sais pas comment résoudre ce problème pour l'instant.Format suivant des données de publication (utilisez l'encodeur base64 pour les données d'image)
{ "_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=" } ] }
Définissez l'autorisation, le type de contenu dans les en-têtes. (Autorisation: Basic xxxxxxxx Content-Type: application / hal + json)
Utilisez le php curl suivant
Allez vérifier le fichier ici - admin / content / files
la source
Vous pouvez installer le module d' interface utilisateur REST pour voir quels points de terminaison vous pouvez utiliser.
Comme il vous permet également de configurer quelles ressources sont exposées par quelle authentification.
Veuillez noter que l'interface utilisateur fournit actuellement les points de terminaison incorrects: - Les chemins URI REST ont été changés en chemins canoniques
la source