सेवाओं 3 का उपयोग करके छवियों को कैसे बचाया जाए


8

मुझे सेवाओं के बारे में कुछ बहुत विस्तृत ट्यूटोरियल मिल गए हैं। मैं उनकी बहुत सराहना करता हूं यहां एक छोटी सूची है।

http://drupal.org/node/1354202

एक नोड का उपयोग करने के लिए कई छवियों को कैसे जोड़ें।

http://drupal.org/node/1699354

लेकिन मैं मोबाइल ऐप से सर्वर पर चित्र अपलोड करने का एक तरीका नहीं ढूंढ सकता। क्या यह संभव है ? मुझे कुछ उदाहरण कहां मिल सकता है?

क्या इसे पूरा करने के लिए सर्विसेज कोर में है? हर समाधान ऐसा लगता है जैसे मुझे इसे प्राप्त करने के लिए ओ कोड कुछ चाहिए।


इस जिस्ट की जाँच करें ।
मुहम्मद रेडा

जवाबों:


6

मुझे एक बार इस तरह की आवश्यकता थी जहां, वेब सेवा का उपयोग करके मुझे एक नोड बनाना होगा जो छवि को भी बचाएगा। निम्न कोड वेब सेवा का उपयोग करके छवि अपलोड और सहेजता है।

// File validator.
$validators = array(
  /**
   * Defaults already allow png, jpg etc. If more needed to be supported,
   * edit here.
   */
  'file_validate_extensions' => array(),
  'file_validate_size' => array(),
);


foreach ($_FILES['files']['name'] as $field_name => $file_name) {
  // Save the file and get file object.
    $file = file_save_upload($field_name, $validators, file_default_scheme() . "://");

  // Check whether image is uploaded.
  if ($file->fid) {
    $node = new stdClass();
    $node->type = 'CONTENT_TYPE';
    $node->title = 'TITLE';
    $node->language = LANGUAGE_NONE;
    $node->uid = 'USER_UID';
    node_object_prepare($node);

    $node->field_custom[$node->language][0]['value'] = 'SOME_VALUE';
    // File upload here..
    $node->field_image[$node->language][0] = (array)$file;

    $node = node_submit($node);
    node_save($node);
  }
  else {                                                                      
    return services_error(t('File upload failed'), 406, t('File upload failed'));
  }
}

नोट: निम्नलिखित कोड सेवाओं का उपयोग करके परीक्षण किया गया था। 3. इसके अलावा यह एक iOS ऐप था जो इस वेब सेवा का उपभोग कर रहा था, और इसने वहां काम किया।

नोट: POST अनुरोध के साथ अपलोड की गई फ़ाइल।

मैंने Google Chrome प्लगइन का उपयोग करके उपरोक्त कोड का परीक्षण किया, जिसे REST कंसोल कहा जाता है । Chrome वेब स्टोर में "आराम कंसोल" के लिए प्लगइन खोज को स्थापित करने और परिणाम में आपको प्राप्त होने वाले पहले प्लगइन को स्थापित करें (ऊपर हरे और नीचे नीले तीर)

उम्मीद है की यह मदद करेगा!


1
धन्यवाद, और आपका मतलब है कि इसे प्राप्त करने के लिए सर्विसेज कोर में कुछ भी नहीं है?
निकस्सक

देखा नहीं गया है .. आप सेवाओं के मॉड्यूल की api.php फाइलें देख सकते हैं
subhojit777

drupal.org/files/endpoint_resources.png यहां संसाधन प्रकार में "फाइलें" की तरह कुछ है।
निकम्माक

क्षमा करें .. मैंने वेब सेवा का उपयोग करके छवि अपलोड करने के लिए संसाधनों / file_resource.inc में कोडिंग की मदद ली .. मैं यह उल्लेख करना भूल गया कि वेब सेवा को बनाए हुए मुझे एक लंबा समय हो गया है
subhojit777

एक बात जो मैं सुझा सकता हूं, वह यह है कि आप अपने वेब सेवा कॉलबैक से वेब सेवा को प्रोग्रामेटिक रूप से कॉल कर सकते हैं और $ फ़ाइल सरणी प्राप्त कर सकते हैं .. लेकिन क्या यह अधिभार नहीं होगा? एक वेब सेवा के अंदर एक और वेब सेवा कॉल करना
सबजोत 777

3

सबसे पहले, सुनिश्चित करें कि आपके समापन बिंदु में फ़ाइल सक्षम है -> संसाधन बनाएँ।

और "क्लाइंट साइड" में मैंने ऐसा कुछ किया:

/**
 * Upload a file using services 3.X
 * 
 * @param the path of the local file
 * @return bool|int the fid of the file.
 *
 * 
 * With the fid you can attach this file in the node object before to be send.
 * ej.
 * $node->title = 'My remote node';
 * $fid = node_upload_image('/The_path/to_the/local_file.jpg');
 * $node->file_field[0] = array( 
 *    'fid' => $fid,
 *    'list' => 1,
 *    'data' => array()
 * );
 * // Other fields related with the node.
 * ...
 * 
 * // Sending the node.
 * $data = http_build_query($node, '', '&');
 * $response = drupal_http_request('myremotesite.com'. '/node', array(
 *   'Accept' => 'application/json', 
 *   'Cookie' => 'auth_cookie_info'
 * ), 'POST', $data);
 *
 * Done. 
 */
function node_upload_image($image_path) {
  $file = array(
    'filesize' => filesize($image_path),
    'filename' => basename($image_path),
    'file' => base64_encode(file_get_contents($image_path)),
    'uid'  => 1  // This should change it by the user who use the service.
  );

  $data = http_build_query($file, '', '&');
  $response = drupal_http_request('myremotesite.com/myservice-endpoint' . "/file", array('Accept' => 'application/json', 'Cookie' => 'auth_cookie_info'), "POST", $data);


  if ($response->code == 200) {
    return json_decode($response->data)->fid;
  }


  $this->error =  $response->status_message; 
  return false;
}

मैंने यह एक अन्य Drupal से किया, और Drupal 6 के लिए है, D7 के लिए कोड को पोर्ट करना आसान होना चाहिए, और मुझे लगता है कि आप इसे कैसे करते हैं, इसके बारे में सामान्य विचार प्राप्त करते हैं।


2

नियमित सेवाओं 3 में एक 'फ़ाइल' समापन बिंदु है। आप बस फ़ाइल निर्माण को सक्षम कर सकते हैं और कुछ इस तरह से पोस्ट कर सकते हैं; फ़ाइल ही आधार -64 कूटबद्ध है:

{
    "filename": "user993.jpg",
    "target_uri": "pictures/user993.jpg",
    "filemime": "image/jpeg",
    "file": "/9j/4AAQSkZJRgABAQELIiyoy0pUQRoFjAVVGAAMACiigBaKKKAP/2Q==...",
    "filesize": "5356"
}

2

एक छवि अपलोड करने के लिए आपको केवल एक फ़ाइल नाम और एक फ़ाइल की आवश्यकता होगी - जो कि बेस 64 एनकोडेड होगा।

आप यहां मेरे रेपो की जांच कर सकते हैं , जहां आपको ड्रुपल 7 रेस्ट सर्विसेज के साथ काम करने के लिए एक सरल वर्ग मिल सकता है और एक उदाहरण। एफपी फ़ाइल जहां कक्षा का उपयोग करने के तरीके पर कुछ उदाहरण हैं। वहां आपको एक उदाहरण भी मिल सकता है कि कैसे एक छवि अपलोड करें, जिसे मैंने हाल ही में जोड़ा है।

https://github.com/flesheater/drupal_rest_server_class

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.