gpt4 book ai didi

详解PHP使用OSS上传文件

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解PHP使用OSS上传文件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、安装阿里云 oss sdk

在网站根目录执行下面命令,安装oss sdk.

composer require aliyuncs/oss-sdk-php 。

安装后,会在 网站根目录/vendor 下找到一个名为 `aliyuncs` 的文件夹.

注:[阿里云 oss - sdk 文档(可不用关注)](https://help.aliyun.com/document_detail/32099.html "官方 oss - sdk 文档") 。

2、使用

1、获取 OSS AccessKeyId、AccessKeySecret

如果没有这两个数据可以参考 https://blog.csdn.net/m_nanle_xiaobudiu/article/details/101756805.

2、简易上传 Html 处理

upload.html 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
< html lang = "en" >
< head >
     < meta charset = "UTF-8" >
     < title >小卜丢个人站 - oss图片上传</ title >
</ head >
< body >
    < form action = "oss-image/upload-image.json" method = "post" enctype = "multipart/form-data" >
        < label for = "file" >文件名:</ label >
        < input type = "file" name = "image" id = "file" >< br >
        < input type = "submit" name = "submit" value = "提交" >
    </ form >
</ body >
</ html >

3、控制器处理 OssImageController.php

直接将请求发送到service,不用关注此层 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
declare (strict_types = 1);
namespace app\controllers;
use app\services\OssImageService;
class OssImageController extends BaseController
{
     /**
      * oss上传图片
      *
      * @return string
      * @throws \OSS\Core\OssException
      */
     public function actionUploadImage()
     {
         return $this ->response(OssImageService::service()->uploadImage());
     }
}

 4、service层处理 OssImageService.php

PHP处理在此层,关注此层即可 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
declare (strict_types = 1);
namespace app\services;
use app\extensions\AliOss;
class OssImageService extends BaseService
{
     /**
      * oss上传图片
      *
      * @return array
      * @throws \OSS\Core\OssException
      */
     public function uploadImage()
     {
             $ossClient  = AliOss::getOssClient();
             $bucketName = AliOss::getBucketName();
             // 文件名
             $fileName = $_FILES [ 'image' ][ 'name' ];
             // 临时文件位置
             $tmpFile = $_FILES [ 'image' ][ 'tmp_name' ];
             // 定义文件存储的oss位置
             $ossPath = 'test/' . date ( 'Y-m-d' ). '/' . date ( 'Hi' ) .mt_rand(10000,99999);
             // 定义oss object
             $object = $ossPath . '.' . $this ->getExtension( $fileName );
             // 执行上传并获取返回 oss 信息
             $info = $ossClient ->uploadFile( $bucketName , $object , $tmpFile );
             $ossUrl = $info [ 'oss-request-url' ];
             // 如果图片的协议是http,则转换成https
             if ( substr ( $ossUrl , 0, 4) == 'http' ) {
                 $ossUrl = substr_replace( $ossUrl , 'https' , 0, 4);
             }
             $data = [
                 'file_url'  => $ossUrl ,
                 'file_name' => basename ( $ossUrl )
             ];
             return $data ;
     }
     /**
      * 返回文件扩展名
      *
      * @param $fileName
      * @return mixed
      */
     private function getExtension( $fileName )
     {
         return pathinfo ( $fileName )[ 'extension' ];
     }
}

5、oss 实例及参数获取封装 AliOss.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
declare (strict_types = 1);
namespace app\extensions;
use OSS\OssClient;
use OSS\Core\OssException;
/**
  *阿里云oss文件上传
  */
class AliOss
{
     const endpoint        = 'oss-cn-hongkong.aliyuncs.com' ;
     const accessKeyId     = 'LSDFskkdDDSSdkfg' ;
     const accessKeySecret = 'LT9cG3JkGKffRPalgk4n33lk8Ll41d' ;
     const bucket          = 'hk-server' ;
     /**
      * 根据Config配置,得到一个OssClient实例
      *
      * @return OssClient 一个OssClient实例
      */
     public static function getOssClient()
     {
         try {
             $ossClient = new OssClient(self::accessKeyId, self::accessKeySecret, self::endpoint, false);
         } catch (OssException $e ) {
             printf( __FUNCTION__ . "creating OssClient instance: FAILED\n" );
             printf( $e ->getMessage() . "\n" );
             return null;
         }
         return $ossClient ;
     }
     public static function getBucketName()
     {
         return self::bucket;
     }
}

6、结果是可以上传成功

返回图片在oss中的完整访问url的 。

?
1
2
3
4
5
6
7
8
{
     status: 1,
     msg: "success" ,
     data: {
         file_url: "https://hk-server.oss-cn-hongkong.aliyuncs.com/test/2018-08-22/211753008.jpg" ,
         file_name: "211753008.jpg"
     }
}

这时,我们访问 https://hk-server.oss-cn-hongkong.aliyuncs.com/test/2018-08-22/211753008.jpg 就可以正常获取到图片了,并且在oss管理控制台也是可以找到上传的文件的.

这只是将文件上传到 oss 上,并将 文件的 url 返给前端,但还没有将文件的信息存在本地。这里建议前端接收到该url后,连同文件的其他数据(比如分类、文件名等)再请求后端的另外的接口,进行本地数据库的信息存储.

3、问题说明

可能会出现 The OSS Access Key Id you provided does not exist in our records 等问题,不要慌,重新生成一下就好了.

以上就是详解PHP使用OSS上传文件的详细内容,更多关于PHP使用OSS的资料请关注我其它相关文章! 。

原文链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/101757320 。

最后此篇关于详解PHP使用OSS上传文件的文章就讲到这里了,如果你想了解更多关于详解PHP使用OSS上传文件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com