【问题标题】:Upload image from client web application to RESTful API将图像从客户端 Web 应用程序上传到 RESTful API
【发布时间】:2015-03-07 12:13:00
【问题描述】:

我一直致力于构建 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 数组为空。我尝试关注此example,但遇到了同样的问题。

我的 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;
    }

我遇到了this tutorial,并且已经能够使用图片的静态 URL 很好地实现它,但这并不是很有帮助,因为我希望用户能够选择他们自己的图片来上传他们的帖子.所以看起来我的问题是围绕获取完整路径,因为该教程在第一个代码块的第 4 行提到并将其发送到 api。那么如何从 $_FILES 数组而不是静态文件 URL 中获取相同的信息呢?

【问题讨论】:

  • 这是怎么复制的?发布的链接仅涵盖通过 AJAX 上传到同一服务器,与将用户选择的文件传递给 RESTful Web 服务无关
  • 你应该删除关于ajax上传的部分,它无关紧要。

标签: php jquery ajax api rest


【解决方案1】:

终于明白了。它与使用json_encode() 发送我的POST 数据有关。一旦我尝试不使用json_encode(),我就可以访问$_FILES 数组。我想我必须在我的ApiCall->post() 方法中添加一个参数来告诉它我是否想json_encode() 我希望传递的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2020-10-24
    • 2013-10-31
    相关资源
    最近更新 更多