फ़ाइल अपलोड्स
अब फ़ाइल अपलोड समर्थित है, अधिक जानकारी के लिए रिलीज़ नोट्स देखें: https://www.drupal.org/node/3024331
ये दो छवियाँ दिखाती हैं कि Postman का उपयोग करके JSON:API के माध्यम से फ़ाइल अपलोड का परीक्षण कैसे करें

यूज़र पिक्चर अपलोड करने के लिए cURL उदाहरण
यह मानता है कि आपने पहले ही प्रमाणीकरण कर लिया है और किसी अन्य अनुरोध में अपना CSRF टोकन प्राप्त कर लिया है।
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 क्लाइंट लाइब्रेरीज़) और 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 ऑब्जेक्ट प्रतिनिधित्व है, लेकिन इसे axios जैसे आपके पसंदीदा HTTP क्लाइंट लाइब्रेरी में डेटा पैरामीटर के रूप में सीधे Drupal को भेजने की कोशिश करने पर गलत फ़ाइल बनेगी। फ़ाइल बन तो जाएगी, सफल प्रतिक्रिया भी मिल सकती है, पर इमेज संभवतः काले बैकग्राउंड पर सफेद वर्ग जैसी दिखेगी।
आपको Node.js की Buffer
क्लास का उपयोग करके इसे वास्तविक बाइनरी Buffer आउटपुट में बदलना होगा। विशेष रूप से, आप from
मेथड का उपयोग करेंगे।
उदाहरण:
मान लीजिए हमने AWS S3 SDK से कोई फ़ाइल ऑब्जेक्ट प्राप्त किया और उस फ़ाइल ऑब्जेक्ट का Body निकाला। उस Body में ऊपर दिखाए गए जैसा Buffer डेटा होगा। आइए उस Body डेटा को एक वेरिएबल में रखें, Buffer क्लास की मदद से सही प्रारूप में बदलें और उसे axios के माध्यम से Drupal के JSON:API एंडपॉइंट पर भेजें (ध्यान दें: यह स्निपेट केवल कोड का महत्त्वपूर्ण भाग है, पूरा हैंडलर नहीं। साथ ही, हम आमतौर पर चीज़ों को DRY रखने के लिए इन्हें हेल्पर लाइब्रेरीज़ में बाँट देते हैं)। महत्त्वपूर्ण पंक्ति है 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"), // महत्त्वपूर्ण: कच्चे Buffer को सही बाइनरी रूप में भेजें
});
console.log(drupalData); // drupalData.data.id में नयी बनी फ़ाइल का UUID होगा
यह विशेष रूप से तब सहायक है जब आप Node.js AWS Lambda फ़ंक्शन्स का उपयोग कर रहे हों और S3 से फ़ाइलें निकालकर Drupal पर पोस्ट कर रहे हों।