REST के माध्यम से Drupal 8 में फाइल कैसे भेजें


9

मैं RESTबिना किसी समस्या के लेख बना सकता हूं । लेकिन मैं यह पता नहीं लगा सकता कि फाइलें कैसे जमा करें।

मैं Drupal 8 के माध्यम से फाइलें (चित्र) कैसे जमा करूं REST?

अपडेट करें:

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"

पोस्ट छवि (इकाई सामग्री के बिना):

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

मुझे पता नहीं है कि कैसे बनाया जा सकता है entity content



ऐसा लगता है कि पोस्टिंग फ़ाइलों के लिए अवरोधकों के एक जोड़े हैं। एक फाइलों की बेस64 एन्कोडिंग है ( drupal.org/node/1927648 पैच उपलब्ध) और दूसरा क्रिएट अपडेट डिलीट ( drupal.org/node/2310307 पैच उपलब्ध) के लिए अन्य समापन बिंदु अनुमतियाँ हैं । मैंने अभी तक इनमें से किसी का भी परीक्षण नहीं किया है।
रानीविक्टोरिया

जवाबों:


4
  • पैच को कोर पर लागू करें: https://www.drupal.org/node/1927648
  • बाकी UI का उपयोग करके इंस्टॉल करें: drush dl restui-8.x-1.x
  • / व्यवस्थापक / कॉन्फ़िगरेशन / सेवाओं / आराम पर जाएं और फ़ाइल को सक्रिय करें /entity/file/{file}
  • के तहत / व्यवस्थापक / लोग / अनुमतियाँ सभी आवश्यक अनुमतियाँ सेट करती हैं
  • सुनिश्चित करें कि फ़ाइलें फ़ोल्डर मौजूद है और उचित अनुमतियाँ हैं
  • कमांड टूल बेस 64 का उपयोग करके छवि को एनकोड करें
  • POST to drupal.url / एंटिटी / फाइल /

    {"_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"}] }
    

    यहां छवि विवरण दर्ज करें


किसी फ़ाइल को सफलतापूर्वक अपलोड करते समय आपको 201 प्राप्त होता है, लेकिन फ़ाइल कहां है, इससे संबंधित कुछ भी नहीं लौटाया जाता है। मुझे उम्मीद है कि कोई ID या फ़ाइल का स्थान लौटाया जाएगा। एक बार अपलोड होने के बाद हम फाइल को कैसे देखें?
रॉनी

मैंने EntityResource.phpआपके पैच और लाइन 117 के आधार पर संशोधित किया , मैंने इकाई आईडी लौटा दी और मुझे अब कम से कम इसका एक संदर्भ इस तरह से है:$response = new ResourceResponse(NULL, 201,['id' => $entity->id()]);
रॉनी

@ रनी उत्तर के आधार पर, मुझे उम्मीद है कि फ़ाइल आपकी साइट के फ़ाइल फ़ोल्डर में स्थित होगी।
ब्लेक फ्रेडरिक

1
@BlakeFrederick अगर डेटाबेस में फ़ाइल का संदर्भ सहेजने की आवश्यकता है, तो यह वास्तव में मेरी मदद नहीं करता है। इस परिदृश्य के बारे में सोचें: मेरे पास एक सामग्री प्रकार एक छवि फ़ील्ड है। एक छवि को उस नोड के साथ जुड़ा होना चाहिए जब बनाया गया हो। जब आप फ़ाइल अपलोड करते हैं, तो 201 के अलावा कुछ भी नहीं दिया जाता है ... मैं उस नोड को छवि को इंगित करने के लिए क्या देता हूं? यही कारण है कि मैंने $entity->id()प्रतिक्रिया में जोड़ा । मैं नोड को इकाई आईडी पास करता हूं और अब वह नोड छवि के बारे में जानता है
रॉनी

@ रॉनी - मैं सिर्फ इसके माध्यम से काम कर रहा हूं, लेकिन मैं ध्यान देता हूं कि जब फ़ाइल को सफलतापूर्वक सर्वर से प्रेषित किया जाता है, तो ड्रुपल की file_managedतालिका में एक संबंधित पंक्ति जोड़ी जाती है । इस पंक्ति में एक अद्वितीय है fid। मेरा मानना ​​है कि अगला कदम एक छवि क्षेत्र के साथ एक नए नोड के निर्माण को पोस्ट करना है और fidछवि क्षेत्र को फ़ाइल के साथ जोड़ना है। अगर मैं आपको समझता हूं, तो सवाल यह है कि fidजब कुछ भी नहीं लौटाया जाए तो कैसे निर्धारित किया जाए। मैंने आज एक Drupal धागे से देखा कि REST UI का भविष्य संस्करण पूर्ण इकाई को वापस कर देगा, लेकिन मुझे यकीन नहीं है कि अब इस समस्या को कैसे हल किया जाए।
ब्लेक फ्रेडरिक

1
  1. स्थापित करें और RestUi और फ़ाइल इकाई मॉड्यूल सक्षम करें ।
  2. गोटो 'एडमिन / कॉन्फिग / सर्विसेज / रेस्ट' और पोस्ट रिसोर्स के साथ-साथ json और hal_json फॉर्मेट के साथ फाइल रिसोर्स को इनेबल करें
  3. पोस्ट अनुमतियाँ सक्षम करें फ़ाइल संसाधन @ व्यवस्थापक / लोगों / अनुमतियों पर POST तक पहुँचें
  4. पोस्ट url - http: //d8.local/entity/file? _Format = hal_json
  5. पोस्ट डेटा का प्रारूप (इमेज डेटा के लिए बेस 64 एनकोडर का उपयोग करें)

    { "_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. सेट करें प्राधिकरण, हेडर में सामग्री-प्रकार। (प्राधिकरण: मूल xxxxxxxx सामग्री-प्रकार: एप्लिकेशन / हॉल + json)

  7. निम्नलिखित php कर्ल का उपयोग करें

    $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. यहां जाकर फाइल को चेक करें - एडमिन / कंटेंट / फाइल


0

आप REST UI मॉड्यूल को देखने के लिए स्थापित कर सकते हैं कि आप क्या उपयोग कर सकते हैं।

Drupal 8 के REST मॉड्यूल के लिए बहुत ही बुनियादी यूजर इंटरफेस।

चूंकि यह आपको यह भी बता देता है कि कौन से संसाधन किस प्रमाणीकरण से उजागर हुए हैं।

कृपया ध्यान दें कि यूआई वर्तमान में गलत एंडपॉइंट प्रदान करता है: - REST URI पथ को कैनोनिकल पथ में बदल दिया गया


फ़ाइल के लिए बाकी UI समापन बिंदु: / फ़ाइल / {आईडी}। मैंने सवाल अपडेट किया है।
user32063
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.