我一直在努力构建一个 API 作为学习目的。它本质上是一个类似Twitter的微帖子API。除了 API,我一直在构建一个由 API 供电的客户端 Web 应用程序。我能够毫无问题地成功发布状态。但是现在我正在尝试允许用户将图像与帖子一起上传。客户端应用程序是使用 mvc
模式构建的。我通过jQuery ajax将提交的帖子发布到我的帖子控制器,如下所示:
$.ajax({
url: '../../posts/newPost',
type: 'POST',
data: formData,
async: true,
success: function (data) {
console.log(data);
$('#post-form-area').removeClass('loading');
$('#post-body').val('');
$('#files').val('');
$('#attached').find('img').remove();
$('#attached').hide();
},
cache: false,
contentType: false,
processData: false
});
我能够使用控制器中的$_FILES
数组成功获取文件数据。但是,我很难弄清楚如何将其发送到我的 RESTful API。我创建了一个类来处理我的 API 调用,下面是我的 POST
方法的代码:
$ds = json_encode($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $ds);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//execute the request
$result = curl_exec($ch);
以下是我传递的发布纯文本状态的数据:
$data = array('user_id' => $_SESSION['user_id'], 'body' => $body, 'time' => $timestamp);
我尝试将$_FILES['file']['tmp_name']
作为数组的一部分传递,但在 API 端,$_FILES
数组为空。我尝试按照此示例进行操作,但遇到了同样的问题。
我的 API 的设置方式,如果$_SERVER['request_method']
POST
我从cURL
php://input
获取内容,然后将这些参数传递给必要的控制器。我是否需要在此处添加任何内容以允许我访问 $_FILES
数组?我已经挖了大约 3 个小时,但找不到任何对我有帮助的东西,所以我感谢任何帮助。
谢谢!
编辑:我不明白这是重复的,因为您发布的链接是重复的,与通过 RESTful 服务上传图像无关......
编辑 2:我已将其缩小到如何从客户端应用程序发送数据,因为我能够成功使用以下命令行代码上传文件:
curl -X POST -F "image=@test.JPG" http://rest.mattaltepeter.com/posts/upload
然后是接收它的代码:
public function uploadAction() {
$result['success'] = move_uploaded_file($_FILES['image']['tmp_name'], SITE_ROOT . '/uploads/' . $_FILES['image']['name']);
$result['data'] = UPLOAD_DIR . $_FILES['image']['name'];
return $result;
}
我遇到了本教程,并且能够使用图像的静态 URL 很好地实现它,但这不是很有帮助,因为我希望用户能够选择自己的图像与他们的帖子一起上传。因此,看起来我的问题围绕着获取完整路径,正如该教程在第一个代码块的第 4 行中提到的那样,并将其发送到 api。那么如何从$_FILES
数组而不是静态文件 URL 中获取相同的信息呢?
终于想通了。这与使用json_encode()
发送我的POST
数据有关。一旦我尝试了json_encode()
,我就可以访问$_FILES
数组。我想我必须在我的ApiCall->post()
方法中添加一个参数,以告诉它我是否要json_encode()
我希望传递的数据。