ホームページ  >  記事  >  バックエンド開発  >  PHPでOSS Webダイレクト送信を使う方法

PHPでOSS Webダイレクト送信を使う方法

藏色散人
藏色散人転載
2021-05-12 11:46:404280ブラウズ

この記事では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 = [ // 限制
        [
            &#39;content-length-range&#39;, // 内容限制
            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');
    }}

実行

PHPでOSS Webダイレクト送信を使う方法

PHPでOSS Webダイレクト送信を使う方法

##Postman テスト

PHPでOSS Webダイレクト送信を使う方法

PHPでOSS Webダイレクト送信を使う方法

##バグにご注意ください

bucketHost

oss で確認できます。

PHPでOSS Webダイレクト送信を使う方法

policy

をコピーするときは、改行があるかどうかに注意してください(私は気づきませんでした...)

推奨学習:「
PHP ビデオ チュートリアル >> _

以上がPHPでOSS Webダイレクト送信を使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。