我发现了一些有关Services 3的非常详细的教程。非常感谢他们,这里是一小部分。
http://drupal.org/node/1354202
http://drupal.org/node/1699354
但是我找不到一种将图像从移动应用程序上传到服务器的方法。那可能吗 ?我在哪里可以得到一些例子?
服务核心中是否可以完成此任务?每个解决方案似乎都需要我编写一些代码才能使其正常工作。
我发现了一些有关Services 3的非常详细的教程。非常感谢他们,这里是一小部分。
http://drupal.org/node/1354202
http://drupal.org/node/1699354
但是我找不到一种将图像从移动应用程序上传到服务器的方法。那可能吗 ?我在哪里可以得到一些例子?
服务核心中是否可以完成此任务?每个解决方案似乎都需要我编写一些代码才能使其正常工作。
Answers:
我曾经有这样的要求,在其中,我必须使用Web服务创建一个还将保存图像的节点。以下代码使用Web服务上载并保存图像。
// 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应用程序,正在使用此Web服务,并且在那里工作。
注意:通过POST请求上传的文件。
我使用名为REST Console的Google Chrome插件测试了上述代码。要在Chrome网上应用店中搜索“ rest console”安装插件并安装第一个插件,您将获得结果(绿色向上和蓝色向下箭头)
希望这可以帮助!
首先,请确保在您的端点中启用了文件->创建资源。
在“客户端”中,我做了这样的事情:
/**
* 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应该很容易,我认为您已经知道了如何做。
要上传图像,您只需要一个文件名和一个文件-这将是base64编码的。
您可以在此处查看我的仓库,在这里可以找到一个与Drupal 7 Rest Services一起使用的简单类,以及一个examples.php文件,其中有一些有关如何使用该类的示例。在那里,您还可以找到我最近添加的有关如何上传图像的示例。