PHP上传图片文件到又拍云,如何把文件上传到又拍云

2021-01-26   阅读:371   分类:后端    标签: PHP

开发网站或者直播平台,我们把图片等文件上传到服务器的话,一个用户打开我们的程序会比较慢,另一个也会占用服务器资源和带宽,这时,我们不妨可以考虑下使用云存储oss,通过cdn加速等来增加文件打开速度。以下使用PHP结合又拍云存储,实现文件上传到又拍云,供大家参考。

又拍云官网:https://www.upyun.com/

注册账号这里不多说。

步骤1、创建云存储服务(设置名称、操作员账号密码,权限)

填写服务名称,勾选应用场景,这里博主使用网页图片,所以勾选网页图片。

操作员和密码、权限

image.png

image.png

image.png


服务创建成功的话会显示如下。

image.png

上面就为完成了又拍云云端的配置。

创建一个服务后,又拍云默认会给我们一个测试域名,域名结构为”https://服务名.test.upcdn.net“

步骤2、使用PHP完成图片上传

又拍云有写好的php-sdk,就不用我们自己写这个,直接传参就行,安装又拍云sdk:https://packagist.org/packages/upyun/sdk

2.1、使用composer下载

composer require upyun/sdk

下载好之后会出现个vendor文件夹

image.png

2.3、创建index.php文件,编写如下代码

把下面5个配置改成自己的

image.png

<?php
require 'vendor/autoload.php';
 
use Upyun\Config;
use Upyun\Upyun;
 
//你自己创建的服务的名称
$serviceName = 'YOUR_SERVICE_NAME';
//操作员账号
$operator = 'YOUR_OPERATOR_NAME';
//操作员密码
$password = 'YOUR_OPERATOR_PASSWORD';
//要上传到哪个目录下
$directory = '/UploadToUpyun/test/';
//要上传的文件的绝对路径(请换成你电脑上一个图片文件的路径)
$uploadFilePath = '/Users/bruce/Downloads/Ts8CYigv.png';
//上传文件名,为什么上传文件名要叫key而不叫filename呢?因为对象存储其实就是一个key value
//的存储结构,你可以认为它就是个redis,key就是redis键名,value就是这个key对应的内容。
$key = basename($uploadFilePath);
//又拍云默认域名在:云存储→选择一个服务并点配置→配置的第一项默认就是域名管理→滚动到最后就能看到默认域名
$defaultDomain = 'http://' . $serviceName . '.test.upcdn.net';
 
//在对象存储中,其实并没有实际意义上的"目录"(或者叫"文件夹"),整个文件夹和最后的key一起,组成的一个整体也是key
//举例:我要把文件存到"2020/06/02/test.jpg",那么这整个就是一个key,而内容当然就是test.jpg这张图片的二进制数据了。
if($directory){
    //真正使用时,$directory可能是用户传过来的,在不知道用户是否写了右斜杠的情况下,统一先去掉再添加一个
    $key = rtrim($directory, '/') . '/' . $key;
}
 
//使用又拍云php-sdk上传文件非常方便,很new一个config对象
$serviceConfig = new Config($serviceName, $operator, $password);
// 15728640 = 15M,如果文件大于15M,则使用并行分块上传
if(filesize($uploadFilePath) > 15728640){
    /* uploadType有两个值
       - BLOCK : 串行分块上传
       - BLOCK_PARALLEL : 并行分块上传
    */
    //然后可对new出的config对象的属性继续设置参数(有哪些参数可直接查看Config类: vendor/upyun/sdk/src/Upyun/Config.php)
    //设置uploadType=BLOCK_PARALLEL表示使用并行分片上传
    $serviceConfig->uploadType = 'BLOCK_PARALLEL';
}
$client = new Upyun($serviceConfig);
$fp = fopen($uploadFilePath, 'rb');
$retArr = $client->write($key, $fp);
// var_dump($retArr);exit;
 
/*
 * 返回的$retArr的值
 * array(6) {
      'x-upyun-content-length' =>
      string(5) "47028"
      'x-upyun-height' =>
      string(3) "473"
      'x-upyun-content-type' =>
      string(9) "image/png"
      'x-upyun-file-type' =>
      string(3) "PNG"
      'x-upyun-width' =>
      string(3) "839"
      'x-upyun-frames' =>
      string(1) "1"
    }
 */
 
//我们随便拿一个元素来判断是否上传成功
if(isset($retArr['x-upyun-content-length'])){
    //在实际使用中,$key可能是用户传过来的,在不知道$key是否以斜杠开头的情况下,统一先去掉再自己添加一个
    echo $defaultDomain . '/' . ltrim($key);
}else{
    echo 'Upload failed.';
}
?>

步骤3、上传成功

image.png

image.png

附API 错误码表:https://help.upyun.com/knowledge-base/errno/#api


【腾讯云】618云上GO!云服务器限时秒杀,1核2G首年95元!

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/593.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸 头像

简忆博客
勤于学习,乐于分享。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×