서비스를 사용하여 이미지를 저장하는 방법 3


8

서비스 3에 대한 매우 자세한 자습서를 찾았습니다. 여기에 작은 목록이 있습니다.

http://drupal.org/node/1354202

node.save 서비스를 사용하여 노드에 여러 이미지를 추가하는 방법은 무엇입니까?

http://drupal.org/node/1699354

그러나 모바일 앱에서 서버로 이미지를 업로드하는 방법을 찾을 수 없습니다. 가능합니까? 어디에서 예를 얻을 수 있습니까?

이것을 달성하기 위해 서비스 핵심에 있습니까? 모든 솔루션은 작동하도록 코드가 필요한 것처럼 보입니다.


요점을 확인하십시오 .
Muhammad Reda

답변:


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 요청으로 파일을 업로드했습니다.

REST Console 이라는 Google 플러그인을 사용하여 위의 코드를 테스트했습니다 . 플러그인을 설치하려면 Chrome 웹 스토어에서 "rest console"을 검색하고 결과로 나타나는 첫 번째 플러그인을 설치하십시오 (녹색 및 아래쪽 파란색 화살표).

도움이 되었기를 바랍니다!


1
감사합니다. 서비스 코어에는이를 달성 할 수있는 것이 없습니다.
niksmac

보지 못했습니다. 서비스 모듈의 api.php 파일을 볼 수 있습니다
subhojit777

drupal.org/files/endpoint_resources.png 여기는 자원 유형의 "파일"과 같은 것입니다.
niksmac

죄송합니다 .. 제가 웹 서비스를 사용하여 업로드 이미지에 자원 코딩 / file_resource.inc의 도움을했다 .. 나는 웹 서비스 생성 이후되고 오랜 시간이 언급하는 것을 잊었다
subhojit777

내가 제안 할 수있는 한 가지는 웹 서비스 콜백에서 프로그래밍 방식으로 웹 서비스를 호출하고 $ 파일 배열을 얻을 수 있다는 것입니다. 웹
Serice

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에는 '파일'엔드 포인트가 있습니다. 파일 생성을 활성화하고 다음과 같이 게시 할 수 있습니다. 파일 자체는 base-64로 인코딩됩니다.

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

2

이미지를 업로드하려면 파일 이름과 파일 만 있으면되며 base64로 인코딩됩니다.

Drupal 7 Rest Services로 작업하기위한 간단한 클래스와 클래스 사용 방법에 대한 예제가있는 examples.php 파일을 찾을 수있는 여기 에서 내 저장소 를 확인할 수 있습니다. 거기에서 최근에 추가 한 이미지를 업로드하는 방법에 대한 예제도 있습니다.

https://github.com/flesheater/drupal_rest_server_class

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.