美文网首页
PHP分片上传文件到又拍云对象存储

PHP分片上传文件到又拍云对象存储

作者: Willis1 | 来源:发表于2020-06-02 12:18 被阅读0次

本文参加又拍云原创技术征文活动

注册&实名认证

注册我就不说了,大家自行前往又拍云注册就行。

注册之后需要实名认证,否则无法使用,但由于我已经实名认证了(当时没截图),网上也很难找到截图,我找了一张很模糊的,不过还是能看清的


image.png

认证方式:支付宝芝麻信用有700分以上选支付宝芝麻信用认证,没有的话选人工(选人工应该要上传手持身份证的照片)
所属行业:我的是博客,所以我选的是门户网站→博客
网站/产品:就填你的网站名称(暂时没有就随便想一个)
网站地址:写你自己搭建的博客域名,没有的话用csdn,博客园,新浪博客之类的博客地址,再没有的话好像也可以不写
个人名称:写你的姓名(跟身份证要一样)
身份证号码:如实填写,否则无法通过实名认证

创建存储桶

登录后,点击页面右上角的控制台,然后选择云产品→云存储

image.png

点击右上角创建一个服务(在这里叫服务,其它云一般叫“存储桶”,英文“bucket”)


image.png

按下图填写,其中加速按你的需求,但如果选择全球加速,价格肯定比国内加速贵;操作员如果你之前没有就需要新建并授权,因为调用api需要一个账号密码,但这个账号密码并不是你注册又拍云的那个账号密码,而是要在这里新建一个,叫“操作员”


image.png

测试操作员账号及默认域名

又拍云的对象存储是支持直接使用ftp登录的,这里我使用filezilla登录(其它ftp工具也类似)。

打开filezilla,如下图所示,点击左上角的“Site Manager”图标(也可直接点击菜单FileSite Manager)进入以下界面,然后按下图填写参数

image.png

如果ftp能连接上,也能上传文件,说明操作员账号没啥问题,连不上可能是前面忘了授权,可以点击右上角用户名→账户管理


image.png

然后点击操作员→管理,查看是否已经给了这个操作员权限,如果没有给,则给它加上权限,然后再试,应该就没问题了


image.png

另外,我们还可以在网页上上传文件


image.png

创建一个服务后,又拍云默认会给我们一个测试域名,域名结构为”https://服务名.test.upcdn.net“,其实也可以在控制台中看到,点击上图中的“配置”→选择域名管理选项卡(实际上默认就是该选项卡)→滚动到最底下即可看见送的测试域名。

使用php分片上传文件

REST API文档,其中并行式断点续传和串行式断点续传,就是分片上传了
[图片上传失败...(image-644bf6-1591071267496)]

不过又拍云有写好的php-sdk,就不用我们自己写这个,直接传参就行。

创建一个文件夹UploadToUpyun,在终端中进入该文件夹,使用composer安装sdk(没有composer命令请自行安装,都0202年了应该都有吧?)

composer require upyun/sdk

安装完成后,在UploadToUpyun文件夹中创建一个index.php,代码如下,注释已经写的非常清楚,填上你的参数即可正常运行,相信没有人不会

<?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.';
}

好了,到这里就写完了,enjoy!

相关文章

  • PHP分片上传文件到又拍云对象存储

    本文参加又拍云原创技术征文活动 注册&实名认证 注册我就不说了,大家自行前往又拍云注册就行。 注册之后需要实名认证...

  • vue页面使用阿里云oss

    web上传文件到阿里云oss 基于vue2.0的上传页面,采用分片上传 源码 Install 1.git clon...

  • 文件分片上传.md

    文件分片上传 文件分片上传的总体思路是 先将文件通过blob.slice()方法将文件切割成多个分片。然后循环上传...

  • PHP大文件上传之腾讯云分片上传

    最近公司项目需要完成一个微课上传的需求 最开始是通过腾讯云简单上传对象操作 直接上传(公司资源都是保存在腾讯云)。...

  • golang七牛云操作

    传送门 上传文件到七牛云对象存储(github.com/qiniu/api.v7) Go实战--golang资源管...

  • 阿里oss文件分片上传

    OSS文件分片上传 依赖 基础参数dto 具体上传方法 小文件上传 大文件上传,分片oss自己处理 处理逻辑:前段...

  • 访问对象存储资源下载变成预览

    访问对象存储资源下载变成预览 上传文件、图片到棱束链对象存储后,使用浏览器访问棱束链对象存储资源,对象存储资源被强...

  • php断续上传大文件,附加又拍云上传实例

    序言:我们上传大文件的时候,往往会上传失败。对多数情况下,修改配置文件即可使用。可是这样往往不能很好的解决对于大型...

  • webuploader前端分片上传

    前端分片上传附件 分片上传定义: 所谓的分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块...

  • 云开发上传文件到云存储指定文件夹

    我们上传文件到云存储时,为了分类,需要分文件夹保存上传的图片,那么上传到指定文件夹呢?在上传方法wx.cloud....

网友评论

      本文标题:PHP分片上传文件到又拍云对象存储

      本文链接:https://www.haomeiwen.com/subject/szcuzhtx.html