php - 为我的 PHP 脚本创建 API - 文件上传

标签 php api file file-upload upload

好的,它是:(我第三次更改此帖子的内容以更好地解释)
我的网站是一个 Image Hosting 网站,这意味着用户可以上传到我的网站并接收到他/她上传的图像的直接链接。
我需要某种 API/方式来从我的站点与我的用户进行通信。我希望注册到我网站的用户能够从他们的网站 UPLOAD IMAGES 到我的 Image Host 而不必离开他们自己的网站(AJAX、iFrame、cURL、JSON,无论它需要什么)。
对我的网站的请求应包含一个 &request=api 参数,以便用户从我的 upload.php 脚本中获得纯文本。通过这种方式,我认为我可以确保以更简单的方式从我的站点获取数据/输出。
所以,基本上, AFTER 从用户站点到我的 Image Host 的 POST/FILES 请求,他们从我的上传处理脚本接收链接,他们需要检索这些链接,然后用于他们自己的需要。
我的问题是: 我的 注册 用户将文件发送到我的服务器 没有 重新加载页面(s)并返回该图像的 URL。我该怎么做呢?

我尝试过的:
我所有的尝试都是阻塞,没有继续。
首先,我在两个不同的表中添加了两个新列。我的 users 表收到一个 api_key 列,如果用户实际注册,该列旨在存储 API key 。另一列 is_api 被添加到我存储图像信息的表中,只有注册用户才能将他们的图像存储在数据库中。通过这个新列(类型为 TINYINT ),我想检查来自用户的图像是否通过 API 添加/上传。
用户使用以下参数向我的 图像主机 发送请求: upload.php?submit=true&action=upload&request=api&key=_SOME_API_KEY_ 。我获取 API key 并检查它属于谁 -> 根据该 key 检索用户 ID -> 我将图像存储到我的服务器 -> 我将图像信息存储在我的数据库中(现在有一个用户 ID) -> 我 echo出网址。
我在这里的失败是:

  • 我无法从第 3 方网站向我的 图像主机 异步发送 任何
  • 我无法收到任何返回到我的 3rd 方网站的信息。

  • 为什么会出现这些失败? 因为我不知道如何实现这两个最重要的步骤。
    我停止尝试将 $_FILES[] 发送到我的 图像主机 的想法之一是尝试通过 发送一个 IMAGE STRING 到我自己的图像服务器 并在那里创建图像 21077。我也做不到,这只是一个有时间思考的人的想法。
    所以,就是这样:我自己没有解决方案的大问题。
    如果您需要更多信息以便更轻松地帮助我,请询问。
    谢谢你。

    更新
    如果我能以某种方式(异步)接收文件,我会在数据库中使用 is_api 字段将其注册,值为 1 ,以将其标记为通过 API(外部)放置。这样,我可以创建一个名为 viewer.php 的新文件,它可能也会接受一些参数,例如 viewer.php?request=api&key=_API_KEY_,它会返回一个 JSON 页面,其中包含指向该 外部 api 用户的最新图像的链接。由 3rd 方网站通过 JSON 检索页面将非常容易。所以,使用这种方法,我基本上只需要在我的 Image Host 中以某种方式接收图像,并且检索部分不会太难。那么我将如何通过 POST IMAGE STRING 发送到我的 Image Host
    如果我的这个新想法可以利用,请告诉我。

    最佳答案

    我正在向我的用户提供这样的脚本作为我网站的桥梁:

    <?php 
    $api_key = 'n8N9v0g9e7b1h0H4A7s2t6q5K8f07B6E4a5p2k4D6L2T1G4Y7I3z5Q5';
    $uses_ajax = false;
    $imgit = array('error' => true);
    
    if (isset($_POST['imgit_request']))
    {
        if ($_POST['imgit_request'] == 'upload')
        {
            $post_data = array(
                'submit'  => 'true',
                'action'  => 'upload',
                'request' => 'api',
                'api_key' => $api_key,
                'imagestr' => chunk_split(base64_encode(file_get_contents($_FILES['images']['tmp_name']))),
                'imagemime' => $_FILES['images']['type'],
                'imagename' => $_FILES['images']['name'],
                'imagesize' => $_FILES['images']['size'],
            );  
        }
        else if ($_POST['imgit_request'] == 'remote')
        {
            $post_data = array(
                'submit'  => 'true',
                'action'  => 'remote',
                'request' => 'api',
                'api_key' => $api_key,
                'links'   => $_POST['links'],
            );  
        }
    
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_URL => 'http://dugi/imgitv3/upload.php',
            CURLOPT_CONNECTTIMEOUT => 5,
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $post_data,
        ));
    
        $resp = curl_exec($curl);
        curl_close($curl);
    
        if (strpos($resp, 'http://') !== false)
        {
            $imgit = array(
                'direct' => $resp,
                'thumb' => str_replace('/i/', '/t/', $resp),
                'error' => false,
            );
    
            if ($uses_ajax)
            {
                echo $imgit['direct'];  
            }
        }
        if (strpos($resp, 'http://') === false)
        {
            $imgit = array(
                'error' => $resp,
            );  
        }
    }
    ?>
    

    然后我根据收到的信息在我的网站上进行其余的处理。我将在我的网站上完成完整的 API CP 后更新此答案,使用该 API 的网站管理员可以看到哪些图像已通过他的网站上传到我的图像主机。从上面的脚本中,您可以看到一个 API key - 它对每个用户都是唯一的,上面的只是一个示例。

    对于异步,我通过告诉用户使用 jQuery 表单插件来使其工作。这是一个非常方便的提交表单的插件,我向用户展示了他们将如何做。

    感谢所有试图帮助我的人。

    关于php - 为我的 PHP 脚本创建 API - 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14718392/

    相关文章:

    php - MySQL:获取给定日期每个玩家的最终分数

    c - 打开新文件时小写到大写

    php - 具有关系的嵌套映射 Laravel 查询

    JavaScript 在 PHP 页面顶部时不起作用

    javascript - 使用类似于 adsense 的异步 javascript 显示远程页面

    java - 使用 choco 求解器求解方程

    python - 如何绕过 HttpError 403 Insufficient Permission? (gmail api,python)

    api - 谷歌地图 api 用户可以选择区域

    java -\xef\xbb\xbf 来自 utf8 文件 java

    asp.net-mvc - 我可以从 MVC 中的 View 访问资源文件吗?