Php 将图像从客户端web应用程序上载到RESTful API

Php 将图像从客户端web应用程序上载到RESTful API,php,jquery,ajax,api,rest,Php,Jquery,Ajax,Api,Rest,我一直致力于构建一个API作为学习目的。它本质上是一个类似twitter的微贴API。除了API之外,我还构建了一个基于API的客户端web应用程序。我能够顺利发布状态,没有任何问题。但现在我正试图允许用户在上传帖子的同时上传一张图片。客户端应用程序是使用mvc模式构建的。我通过jQuery ajax将提交的帖子发布到我的帖子控制器,如下所示: $.ajax({ url: '../../posts/newPost', type: 'POST',

我一直致力于构建一个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
        });
我能够使用控制器中的
$\u 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);
我已尝试将
$\u文件['file']['tmp\u name']
作为数组的一部分传递,但在API端,
$\u文件
数组为空。我试着遵循这一点,但我遇到了同样的问题

我的API的设置方式是,如果
$\u服务器['request\u method']
POST
我从
cURL
php://input
,然后将这些参数传递给必要的控制器。我是否需要在此处添加任何可以访问
$\u文件
数组的内容?我已经挖了大约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。那么,我如何从
$\u FILES
数组而不是静态文件URL中获得相同的信息呢?

终于找到了答案。它必须使用
json\u encode()
发送我的
POST
数据。当我使用
json\u encode()
尝试它时,我就可以访问
$\u文件
数组。我想我必须在我的
ApiCall->post()
方法中添加一个参数,告诉它我是否想要
json\u encode()
我想要传递的数据。

这怎么会是重复的?发布的链接仅涉及通过AJAX上传到同一服务器,与将用户选择的文件传递到RESTful web服务无关。您应该删除关于AJAX上传的部分,这是不可逆的。