即使url工作,使用imgur api获取破碎的图像

时间:2017-05-10 22:53:45

标签: php mysql image api url

这是我的代码我使用imgur api上传图片并通过我的表单在网页上显示。不显示实际图像,只显示损坏的页面图标,如果我将损坏的图像复制到单词或记事本中,则显示实际图像。显然,如果将图像复制到文字或记事本中,图像就存在并且它是正确的路径。此外,我非常确定api是有效的,因为我的数据库中保存的imgur url可以正常工作并显示图像。什么遗失或我应该像我显示图像一样改变?

if (isset($_POST['post'])) {
    if ($_FILES['postimg']['size'] == 0) {
        $postbody = $_POST['postbody'];
        $loggedInUserId = check::isLoggedIn();
        if (strlen($postbody) > 160 || strlen($postbody) < 1) {
            die('Incorrect length!');
        }

        connect::query('INSERT INTO dry_posts VALUES (null, :postbody, NOW(), 0,:postimg)', array(':postbody' => $postbody));

        // Post::createPost($_POST['postbody']);

    } else {

        $url = 'https://api.imgur.com/3/image'; // API endpoints, info: https://api.imgur.com/endpoints/image#image-upload
        $client_id = ''; // Get client_id here: https://api.imgur.com/#registerapp

        $fh = fopen($_FILES['postimg']['tmp_name'], 'r');
        $read = fread($fh, $_FILES['postimg']['size']);
        fclose($fh);
        $post = array(
            'image' => base64_encode($read)
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Authorization: Client-ID '.$client_id
        ));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $json = curl_exec($ch); // Response, info: https://api.imgur.com/#responses
        curl_close($ch);
        // $image = json_decode($json, true); // Array
        $image = json_decode($json); // Object
        // var_dump($image);
        //$postimg = $image['data']['link']; // Array-style
        $postimg = $image - > data - > link; // Object-style

        connect::query('INSERT INTO dry_posts VALUES (null, \'\', NOW(), 0, :postimg)', array(':postimg' => $postimg));

    }


}
$dbposts = connect::query('SELECT * FROM dry_posts ORDER BY id DESC');
$posts = "";
//here's how I display the images/posts 
foreach($dbposts as $p) {
    if (!connect::query('SELECT post_id FROM post_likes WHERE post_id=:postid', array(':postid' => $p['id']))) {
        $posts. = "<img src='".$p['postimg'].
        "'>".htmlspecialchars($p['body']).
        " <
        form action = 'try.php?postid=".$p['
        id ']."'
        method = 'post' >
            <
            input type = 'submit'
        name = 'like'
        value = 'Like' >
            <
            span > ".$p['likes']."
        likes < /span> <
            /form> <
            hr / > < /br / >
            ";

    } else {
        $posts. = "<img src='".$p['postimg'].
        "'>".htmlspecialchars($p['body']).
        " <
        form action = 'try.php?postid=".$p['
        id ']."'
        method = 'post' >
            <
            input type = 'submit'
        name = 'unlike'
        value = 'Unlike' >
            <
            span > ".$p['likes']."
        likes < /span> <
            /form> <
            hr / > < /br / >
            ";
    }
}

以及表格

<form action="try.php" class = "forum" method="post" enctype="multipart/form-data">
        <textarea name="postbody" rows="4" cols="60" class = "text"></textarea>
         <br />Upload an image:
        <input type="file" name="postimg">
        <input type="submit" name="post" value="Post">
        <input type="submit" value="Upload">
</form>

<div class="posts">
        <?php echo $posts; ?>
</div>

1 个答案:

答案 0 :(得分:0)

我认为这称为anonymous use of the API,因此所有上传的图片都是匿名共享,而不会附加到您的帐户。

要将图片上传到您的私人帐户,您可能需要获取访问令牌,并使用Bearer身份验证。