Ֆայլերի վերբեռնումներ
Ֆայլերի վերբեռնումը այժմ աջակցվում է, մանրամասների համար տեսեք թողարկման նշումները՝ https://www.drupal.org/node/3024331
Այս երկու նկարները ցույց են տալիս, թե ինչպես օգտագործել Postman-ը՝ ֆայլ վերբեռնելու համար JSON:API-ով

Curl օրինակ՝ օգտատիրոջ նկարը վերբեռնելու համար
Սա ենթադրում է, որ դուք արդեն նույնականացվել եք և մեկ այլ հարցմամբ ստացել եք ձեր CSRF token-ը։
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
Խորհուրդներ՝ axios (կամ այլ http client գրադարաններ) և Node.js օգտագործելիս
Դուք կարող եք հանդիպել դեպքի, երբ պատկերային տվյալները, որ ցանկանում եք ուղարկել, գտնվում են Buffer ֆորմատով։ Օրինակ՝
<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>
Չնայած սա տեխնիկապես Buffer օբյեկտի ներկայացումն է՝ պատկերային բինար տվյալների համար, եթե փորձեք այս Buffer-ը ուղարկել Drupal՝ ձեր նախընտրած http client գրադարանով, օրինակ՝ axios-ով, արդյունքում կստանաք սխալ ֆայլ։ Ֆայլը գոյություն կունենա, կարող եք ստանալ հաջող պատասխան, բայց պատկերը ամենայն հավանականությամբ պարզապես սպիտակ քառակուսի կլինի սև ֆոնի վրա։
Դուք պետք է օգտագործեք Node.js-ի Buffer
class-ը՝ սա իրական բինար Buffer արտահանելու համար։ Մասնավորապես, օգտագործեք from
մեթոդը։
Օրինակ՝
Ենթադրենք, որ AWS S3 SDK-ով ստացել եք ֆայլի օբյեկտ և վերցրել եք այդ ֆայլի Body-ն։ Այդ Body-ն կունենա Buffer տվյալներ, ինչպես ցույց է տրված վերևում։ Եկեք պահենք այդ Body-ն փոփոխականում, օգտագործենք Buffer class-ը՝ ճիշտ ֆորմատի փոխարկելու համար և ուղարկենք Drupal-ի JSON:API-ին axios-ով (նկար՝ սա պարզապես կոդի հիմնական մասն է, ամբողջական չհանդիսացող հենիչ։ Սովորաբար մենք սա առանձնացնում ենք օգնության գրադարաններում)։ Կարևոր տողը՝ data: Buffer.from(buffer, "binary")
։
const buffer = storedFile.Body; // այստեղ պահվում է վերոնշյալ buffer տվյալը
const drupalData = await axios({
method: "post",
url: url, // Ձեր կայքի /jsonapi/media/image/field_media_image/ URL-ը
auth: {
username: xxx,
password: xxx
},
headers: {
'Accept': 'application/vnd.api+json',
'Content-Type': 'application/octet-stream',
'X-CSRF-Token': token, // Պետք է ստանաք սա Drupal-ից՝ /session/token-ից!
'Content-Disposition': 'file; filename="' + filename + '"',
},
data: Buffer.from(buffer, "binary"),
});
console.log(drupalData); // նոր ստեղծված ֆայլի uuid-ը պարունակվում է drupalData.data.id-ում
Սա հատկապես օգտակար է, եթե օգտագործում եք Node.js AWS Lambda ֆունկցիաներ և ֆայլերը վերցնում եք S3-ից՝ Drupal ուղարկելու համար։