>백엔드 개발 >PHP 튜토리얼 >PHP에서 oss 웹 직접 전송을 사용하는 방법

PHP에서 oss 웹 직접 전송을 사용하는 방법

藏色散人
藏色散人앞으로
2021-05-12 11:46:404307검색

이 글에서는 PHP에서 oss 웹 직접 전송을 사용하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

서문

직접 전송의 장점: 프런트 엔드에서 oss code> 서버를 거치지 않고 서버 대역폭 사용량을 줄이고 사용자 업로드 속도를 높일 수 있습니다. <code>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 웹 직접 전송을 사용하는 방법

PHP에서 oss 웹 직접 전송을 사용하는 방법

Postman测试

PHP에서 oss 웹 직접 전송을 사용하는 방법

PHP에서 oss 웹 직접 전송을 사용하는 방법

小心bug

bucketHost 可以在 oss 查看。

PHP에서 oss 웹 직접 전송을 사용하는 방법

复制 policy

이 기사에서 말하는 내용은 확장팩을 설치할 필요가 없으며 직접 전송 기능만 있고 매우 가볍습니다.
https://github.com/iiDestiny/flysystem-oss를 참고해서 작성했습니다. php에서 다른 oss 함수를 사용해야 한다면 확장 기능을 사용하세요. 패키지가 더 적합합니다. OssUploadSignature.phprrreee
🎜Run🎜🎜 17806.png" alt="PHP에서 oss 웹 직접 전송을 사용하는 방법"/>🎜🎜PHP에서 oss 웹 직접 전송을 사용하는 방법🎜🎜🎜🎜우체부 테스트🎜🎜🎜🎜PHP에서 oss 웹 직접 전송을 사용하는 방법🎜🎜🎜🎜버그 조심🎜 🎜bucketHostoss. 🎜🎜PHP에서 oss 웹 직접 전송을 사용하는 방법 🎜🎜복사 policy 시 줄 바꿈이 있는지 주의하세요(저는 눈치채지 못했습니다...)🎜🎜🎜추천 학습: "🎜PHP Video Tutorial🎜" 🎜

위 내용은 PHP에서 oss 웹 직접 전송을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제