基于php实现七牛抓取远程图片

基于PHP实现七牛抓取远程图片的攻略如下:

一、安装七牛SDK

要使用PHP代码操作七牛云存储,需要先安装相关SDK,在这里我们使用qiniu/php-sdk这个官方提供的SDK,使用composer安装即可。

composer require qiniu/php-sdk

二、申请AK/SK

申请过程不细讲,可以参考七牛云文档。

三、编写代码

实现流程

  1. 获取远程图片URL和要存储到的七牛bucket和key
  2. 获取远程图片内容
  3. 创建一个七牛服务对象
  4. 上传图片到七牛

以下是基于魔术方法的一个示例实现:

<?php

require_once __DIR__ . '/vendor/autoload.php';

# AK&SK
$accessKey = '<Your Access Key>';
$secretKey = '<Your Secret Key>';

# 要抓取的远程文件 URL
$fileUrl = 'http://www.example.com/remote.jpg';

# 存储到七牛后的文件名及路径
$key = 'my-prefix/some/path/file-name.jpg';

# 七牛配置
$config = new \Qiniu\Config();
$config->useHTTPS = true;

# 构建七牛服务对象
$qiniu = new \Qiniu\Storage\UploadManager($config);

# 抓取远程文件
list($fileContents) = \Qiniu\Utils\HttpManager::requestWithoutAuth($fileUrl);

# 上传到七牛存储
list($ret, $err) = $qiniu->put($token, $key, $fileContents);

if ($err !== null) {
    echo sprintf("qiniu-sdk error: %s\n", $err->getMessage());
} else {
    echo sprintf("success: http://%s/%s\n", $config->getUpHost(), $ret['key']);
}

如何使用

在上面的代码示例中,需要填写七牛AK和SK,$fileUrl表示要抓取的远程图片URL,$key是上传到七牛的文件名及路径。其余的代码无需修改,直接运行即可实现抓取远程图片并上传到七牛。

四、优化实现

实际上,上面的文件上传代码还是有问题的,因为抓取远程图片的过程可能会比较耗时,这会导致后面的文件上传操作可能会出现超时等问题。一个更好的解决方案是使用PHP协程进行异步编程,代码如下:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use GuzzleHttp\Client;
use function GuzzleHttp\Promise\coroutine;

# AK&SK
$accessKey = '<Your Access Key>';
$secretKey = '<Your Secret Key>';

# 要抓取的远程文件 URL
$fileUrl = 'http://www.example.com/remote.jpg';

# 存储到七牛后的文件名及路径
$key = 'my-prefix/some/path/file-name.jpg';

# 七牛配置
$config = new \Qiniu\Config();
$config->useHTTPS = true;

# 构建七牛服务对象
$qiniu = new \Qiniu\Storage\UploadManager($config);

# GuzzleHttp 请求客户端
$httpClient = new Client();

coroutine(function () use ($qiniu, $httpClient, $fileUrl, $key) {

    # 抓取远程文件
    $downloadPromise = $httpClient->getAsync($fileUrl)->then(function ($response) {
        return $response->getBody()->getContents();
    });

    # 存储到七牛
    $uploadPromise = $downloadPromise->then(function ($fileContents) use ($qiniu, $key) {
        list($ret, $err) = $qiniu->put(null, $key, $fileContents);
        if ($err !== null) {
            echo sprintf("qiniu-sdk error: %s\n", $err->getMessage());
        } else {
            echo sprintf("success: http://%s/%s\n", $config->getUpHost(), $ret['key']);
        }
    });

    yield $uploadPromise;
});

以上示例代码中,将抓取远程文件和上传到七牛存储的过程异步执行,这样不会阻塞其他操作,文件上传操作也不存在超时等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于php实现七牛抓取远程图片 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 用PHP实现WEB动态网页静态

    要用PHP实现WEB动态网页静态,需要通过以下步骤完成: 1. 设置Apache服务器 在本地计算机上安装并设置Apache服务器。这可以使用WAMP,XAMPP或MAMP中的任何一个来完成。这些是预先配置好的Web服务器软件包,可以轻松地在Windows,Mac OS和Linux上设置和运行Apache。 2. 创建静态HTML文件 创建一个简单的HTML…

    PHP 2023年5月27日
    00
  • 强烈推荐:php.ini中文版(1)

    针对您的问题,以下是关于“强烈推荐:php.ini中文版(1)” 的完整攻略。 强烈推荐:php.ini中文版(1) 什么是php.ini? php.ini 是 PHP 的配置文件,ISP 或服务商一般为网站用户提供一份 php.ini 文件。一些虚拟主机供应商不允许客户更改它,而在独立服务器上可以自由地进行更改。 为什么需要php.ini中文版? php.…

    PHP 2023年5月24日
    00
  • 学习PHP的数组总结【经验】

    下面是学习PHP数组攻略的详细讲解: 一、介绍 本篇攻略主要介绍PHP中数组的相关知识,包括数组的定义、创建、遍历、数组的常用函数等内容。通过本文的学习,您将能够掌握PHP中数组的使用方法。 二、数组的定义 PHP中的数组是一种有序、可重复、可变的集合数据类型。数组元素可以是任何类型的数据,例如整数、浮点数、字符串、对象等等。数组可以通过键值对的方式访问元素…

    PHP 2023年5月26日
    00
  • php实现websocket实时消息推送

    下面是详细讲解“php实现websocket实时消息推送”的完整攻略。 什么是Websocket Websocket是HTML5一种新协议,实现了浏览器与服务器全双工通信,让服务器能够主动向客户端推送内容。相比传统的HTTP协议,Websocket具有更高效、更实时的特点,适合用于需要实时交互和通信的场景,如在线聊天、在线游戏等。 基本原理 Websocke…

    PHP 2023年5月23日
    00
  • Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版

    下面我就来为大家讲解“Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版”的完整攻略。 一、前置条件 已安装CentOS 7系统。 已安装Git 二、安装 Nginx 和 PHP(FastCGI) 请参考我之前写的文章:Nginx+PHP(FastCGI)高并发WEB服务器搭建教程,这里就不再赘述。 三、安装自动化部署脚本 gi…

    PHP 2023年5月24日
    00
  • PHP实现cookie跨域session共享的方法分析

    下面是详细讲解“PHP实现cookie跨域session共享的方法分析”的完整攻略。 什么是cookie跨域session共享? 在 cookie 被用作 session 的存储方式时,不同的子域名(或路由)通过一个主域名(或路由)来访问 session 数据。在这种情况下,由于 cookie 值的域和路径限制,session 数据无法在子域名之间共享,导致…

    PHP 2023年5月24日
    00
  • php $_SERVER windows系统与linux系统下的区别说明

    当使用 PHP 时,$_SERVER 是一个超级全局变量,里面包含了诸如头信息、路径、及脚本位置等信息的数组。$_SERVER 数组在 Windows 和 Linux 系统下有一些差异,本文将对这些差异进行详细的讲解。 $_SERVER[‘DOCUMENT_ROOT’] 的区别 在 Windows 系统下,$_SERVER[‘DOCUMENT_ROOT’] …

    PHP 2023年5月30日
    00
  • php禁用cookie后session设置方法分析

    下面就为大家详细讲解“php禁用cookie后session设置方法分析”的完整攻略。 什么是Session Session,是指当用户打开一个网站页面后,网站会为该用户在服务器端开辟一块用户数据空间,并将该用户的一些信息存储在此数据空间中。同时,网站会给该用户随机生成一个session id,用于标识该用户的身份信息。这样,用户的请求都会携带session…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部