php怎么使用oss web直传

藏色散人
发布: 2021-05-12 11:46:40
转载
4572人浏览过

本篇文章给大家介绍一下php使用oss web直传。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

前言

直传优点: 无需经过服务器,由前端直传到 oss,因此可以减少服务器带宽使用 和 加快用户上传速度。

本篇讲的这个不需要安装扩展包,仅有直传功能,是非常轻量的。

我是参考https://github.com/iiDestiny/flysystem-oss来写的,如果你需要在 php 使用其他的 oss 功能,那么扩展包更合适。

创建OssUploadSignature.php

<?php

namespace Service;class OssUploadSignature{

    private $accessKeyId;
    private $accessKeySecret;
    private $expire = 300; // 5分钟有效期
    private $bucketHost; // Bucket 域名
    private $conditions = [ // 限制
        [
            'content-length-range', // 内容限制
            0,                  // 最小上传
            10 * 1024 * 1024 // 最大上传10m
        ], [
            0 => 'starts-with',
            1 => '$key', // 必须带key
            2 => 'images/', // 如:/images  只能放在/images的路径
        ]
    ];

    public function setBucketHost($bucketHost)
    {
        $this->bucketHost = $bucketHost;
        return $this;
    }

    public function setAccessKeyId($accessKeyId)
    {
        $this->accessKeyId = $accessKeyId;
        return $this;
    }

    public function setAccessKeySecret($accessKeySecret)
    {
        $this->accessKeySecret = $accessKeySecret;
        return $this;
    }

    public function signatureConfig()
    {
        $end = time() + $this->expire;
        $arr = [
            'expiration' => $this->gmt_iso8601($end),
            'conditions' => $this->conditions,
        ];
        $base64Policy = base64_encode(
            json_encode($arr)
        );
        $signature = base64_encode(hash_hmac('sha1', $base64Policy, $this->accessKeySecret, true));
        return [
            'OSSAccessKeyId' => $this->accessKeyId,
            'policy' => $base64Policy,
            'signature' => $signature,
            'expire' => $end,
            'bucketHost' => $this->bucketHost        ];
    }


    // fix bug https://connect.console.aliyun.com/connect/detail/162632
    public function gmt_iso8601($time)
    {
        return (new \DateTime(null, new \DateTimeZone('UTC')))->setTimestamp($time)->format('Y-m-d\TH:i:s\Z');
    }}
登录后复制

运行

7b682f950e489edd72a4c7f47b1f256.png

立即学习PHP免费学习笔记(深入)”;

847589f3fad7a256b7069a9980df313.png

Postman测试

7c06746477c9073a339b5402f07c75a.png

0417bc9869a076a8f6fb0a06c6a9ff3.png

小心bug

bucketHost 可以在 oss 查看。

ce6ac0e95ba08a6ca04d671f3364a95.png

复制 policy 的时候 注意是否有换行符(我都没注意…)

推荐学习:《PHP视频教程》                                                       

以上就是php怎么使用oss web直传的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:learnku网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号