Maison >développement back-end >tutoriel php >Comment utiliser la transmission directe oss web en php

Comment utiliser la transmission directe oss web en php

藏色散人
藏色散人avant
2021-05-12 11:46:404307parcourir

Cet article vous présentera comment utiliser la transmission directe oss web en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Avant-propos

Avantages directs : Pas besoin de passer par le serveur, du front-end vers

, cela peut donc réduire l'utilisation de la bande passante et de la vitesse du serveur augmenter la vitesse de téléchargement des utilisateurs. oss

Ce dont nous parlons dans cet article ne nécessite pas l'installation de packs d'extension. Il a uniquement une fonction de transmission directe et est très léger.

Je l'ai écrit en référence à https://github.com/iiDestiny/flysystem-oss Si vous devez utiliser d'autres fonctions

dans php, alors le package d'extension est plus approprié. oss

Créer 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');
    }}

Exécuter

Comment utiliser la transmission directe oss web en php

Comment utiliser la transmission directe oss web en php

Test Postman

Comment utiliser la transmission directe oss web en php

Comment utiliser la transmission directe oss web en php

Attention aux bugs

peut être consulté sur bucketHost. oss

Comment utiliser la transmission directe oss web en php

Lors de la copie

, faites attention s'il y a des sauts de ligne (je n'ai même pas remarqué...)policy

Recommandé étude : "Tutoriel vidéo PHP》                                                   

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer