logo

Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
04/09/2025, by Ivan

Il caricamento di file è ora supportato, vedi le note di rilascio per maggiori informazioni: https://www.drupal.org/node/3024331

Queste due immagini mostrano come usare Postman per testare il caricamento di file tramite JSON:API

Header file di Json API
Header di Json:API in Postman.

Esempio cURL per caricare l’immagine di un utente

Questo presuppone che tu abbia già effettuato l’autenticazione e recuperato il tuo token CSRF in un’altra richiesta.

curl -s -X POST -b cookie.txt \
  --header "Accept: application/vnd.api+json" \
  --header "Content-Type: application/octet-stream" \
  --header "X-CSRF-Token: $TOKEN" \
  --header 'Content-Disposition: file; filename="test.jpg"' \
  --data-binary "@test.jpg" \
  http://localhost/jsonapi/user/user/$UUID/user_picture

Suggerimenti quando si usa axios (o altre librerie client HTTP) e Node.js:

Potresti scoprire che il formato dei dati dell’immagine che devi inviare è in formato Buffer. Per esempio:

<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff fe 00 3e 43 52 45 41 54 4f 52 3a 20 67 64 2d 6a 70 65 67 20 76 31 2e 30 20 28 75 73 69 ... 582549 more bytes>

 Sebbene tecnicamente questa sia la rappresentazione dell’oggetto Buffer dei dati binari dell’immagine, provare a inviare questo come parametro data alla tua libreria client HTTP preferita, come axios, causerà la creazione di un file non corretto. Un file ci sarà, riceverai una risposta di successo, ma l’immagine probabilmente sarà solo un quadrato bianco su sfondo nero. 

Sarà necessario usare la classe Buffer di Node.js per convertirla in un vero output Buffer binario. In particolare, userai il metodo from

Per esempio:

Supponiamo di aver recuperato un oggetto file utilizzando l’SDK di AWS S3 e di aver ottenuto il Body di quell’oggetto file. Quel Body conterrà dati Buffer come mostrato sopra. Mettiamo quei dati Body in una variabile, usiamo la classe Buffer per portarli nel formato corretto e inviamoli all’endpoint JSON:API di Drupal usando axios (nota: questo snippet è solo la parte importante del codice, non l’intero handler. Inoltre, di solito suddividiamo tutto questo in alcune librerie helper per mantenere il codice più DRY). La riga importante è data: Buffer.from(buffer, "binary"):

const buffer = storedFile.Body; // contiene i dati buffer indicati sopra.

const drupalData = await axios({
  method: "post",
  url: url, //URL verso /jsonapi/media/image/field_media_image/ sul tuo sito.
  auth: {
  	username: xxx
  	password: xxx
  },
  headers: {
    'Accept': 'application/vnd.api+json',
    'Content-Type': 'application/octet-stream',
    'X-CSRF-Token': token, // Devi prima recuperarlo da Drupal da /session/token!
    'Content-Disposition': 'file; filename="' + filename + '"',
  },
  data: Buffer.from(buffer, "binary"),

});

console.log(drupalData); // lo uuid del file appena creato è contenuto in drupalData.data.id

 Questo è particolarmente utile se utilizzi funzioni AWS Lambda in Node.js ed estrai file da S3 per postarli su Drupal.