PHP 使用 OSS上传文件

一、安装阿里云 oss sdk

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

composer require aliyuncs/oss-sdk-php

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

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

 
二、使用

1、获取 OSS AccessKeyId、AccessKeySecret

如果没有这两个数据可以参考 如何获取 OSS AccessKeyId、AccessKeySecret 获取。

 
2、简易上传 Html 处理

upload.html

<!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,不用关注此层)

<?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处理在此层,关注此层即可)

<?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,则转换成httpsif (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

<?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的

{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后,连同文件的其他数据(比如分类、文件名等)再请求后端的另外的接口,进行本地数据库的信息存储。

 

三、问题说明

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

另外,遇到这类 阿里云 oss 官方返回的错误时,我们可以参考 oss 官方错误排查 。

 

注:免费领取阿里云产品优惠券:https://www.haveyb.com/aliyun-coupon

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack常用配置

1.加载CSS 命令行输入 npm install --save-dev style-loader css-loader webpack.config.js配置如下 const path require(path);module.exports {entry: ./src/index.js,output: {filename: bundle.js,path: path.resolve(__dirname, dist)},module: {rules: [{test: /\.css$…

《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点

本节书摘来自华章出版社《实用软件架构&#xff1a;从系统环境到软件部署》一书中的第2章&#xff0c;第2.4节&#xff0c;作者&#xff1a;[印]蒂拉克米特拉&#xff08;Tilak Mitra&#xff09;著&#xff0c;爱飞翔 译&#xff0c;更多章节内容可以访问云栖社区“华章计算机…

TCP:当初取代NCP,如今害怕被取代

我叫TCP&#xff08;Transmission Control Protocol&#xff09;也叫传输控制协议。不觉回忆1983年&#xff0c;亲手将NCP协议淘汰&#xff0c;取而代之的是我&#xff0c;成了火遍大江南北的网络红人之一。现如今&#xff0c;我感受到前所未有的恐惧&#xff0c;因为我一生的敌…

js截取字符串实例

// JS截取字符串可使用 substring()或者slice() // // 函数&#xff1a;substring() // 定义&#xff1a;substring(start,end)表示从start到end之间的字符串&#xff0c;包括start位置的字符但是不包括end位置的字符。 // 功能&#xff1a;字符串截取&#xff0c;…

PHP 使用 OSS 批量删除图片

1、控制器 OssImageController.php&#xff08;不必关注此层&#xff09; <?php declare(strict_types 1); namespace app\controllers; use app\services\OssImageService; class OssImageController extends BaseController {/*** oss 批量删除图片** throws null*/pub…

批处理中的IF详解

在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法&#xff1a;IF [NOT] ERRORLEVEL number command 这种用法现在很少用了&#xff0c;因为它需要使用到CHOICE命令&#xff0c;这个命令现在被set /p代替了&#xff0c;它是判断CHOICE命令选择的选项的&…

fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

女子篮球运动员比赛期间的心率、血乳酸浓度和时间-运动分析—摘要—本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式。在九场正式比赛中&#xff0c;对九名大学代表队队员进行了研究。每场比赛都被录像以确定主要动作的频率&#xff0c;连续记录心率&am…

《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些

本节书摘来异步社区《JavaScript机器人编程指南》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a;【美】Kassandra Perch&#xff08;珀芝&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 NodeBot是什么&#xff0c;基本词…

解决在Python中使用Win32api报错的问题,No module named win32api

一、系统环境 操作系统: Win7 64位 Python&#xff1a;3.7.0 二、在使用import win32api时&#xff0c;报错:No module named win32api 网上查到有下面解决办法&#xff1a; 方法1&#xff1a;pip install pypiwin32或pip3 install pypiwin32 或 python -m pip install pypiwin…

web网页调用本地cs客户端程序exe

1.reg注册表文件注册WST Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\WST]"URL Protocol""C:\\WSTStart.exe""WSTProtocol"[HKEY_CLASSES_ROOT\WST\DefaultIcon]"C:\\WSTStart.exe,1"[HKEY_CLASSES_ROOT\WST\shell][HKEY…

国庆快乐!

加油我的国&#xff01;繁荣强大我的国&#xff01;

《Python游戏编程入门》——1.2 初识Python

本节书摘来自异步社区《Python游戏编程入门》一书中的第1章&#xff0c;第1.2节&#xff0c;作者[美]Jonathan S. Harbour &#xff0c;李强 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 初识Python Python既是一个软件工具包&#xff0c;也是一种…

大数据:Parquet文件存储格式

一、Parquet的组成 Parquet仅仅是一种存储格式&#xff0c;它是语言、平台无关的&#xff0c;并且不需要和任何一种数据处理框架绑定&#xff0c;目前能够和Parquet适配的组件包括下面这些&#xff0c;可以看出基本上通常使用的查询引擎和计算框架都已适配&#xff0c;并且可以…

“数据门”事件频发 如何避免人为因素导致数据泄露?

前段时间&#xff0c;某酒店集团数据泄露引起轩然大波&#xff0c;泄露的数据中包含了用户姓名、手机号、邮箱、号等多项信息。卖家对这个约5亿条数据打包出售价格为8比特币或520门罗币。而关于此次信息泄露事件的原因&#xff0c;目前尚未定论。据悉&#xff0c;由于集团某程序…

lamda获取参数集合去空_JAVA集合框架知识

1. Vector用法和ArrayList区别(1) Vector的特有方法有哪些&#xff1f;void addElement(E obj) 将指定的组件添加到此向量的末尾&#xff0c;将其大小增加1。(2) Vector与ArrayList的区别是什么&#xff1f;①Vector的add()方法是同步方法&#xff0c;ArrayList的add()方法是非…

阿里云ECS服务器多种实例规格如何选择

一、什么是 ECS 云服务器ECS&#xff08;Elastic Compute Service&#xff09;是一种简单高效、处理能力可弹性伸缩的计算服务。 二、常见的几种实例规格 &#xff11;、个人类 &#xff08;1&#xff09;突发型&#xff08;t5、t6&#xff09; 特点&#xff1a;性能基线和积…

Blazor学习之旅(2)第一个Blazor应用

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。本篇我们来构建第一个Blazor Web应用&#xff0c;…

《深入理解Hadoop(原书第2版)》——2.6本章小结

本节书摘来自华章计算机《深入理解Hadoop&#xff08;原书第2版&#xff09;》一书中的第2章&#xff0c;第2.6节&#xff0c;作者 [美]萨米尔瓦德卡&#xff08;Sameer Wadkar&#xff09;&#xff0c;马杜西德林埃&#xff08;Madhu Siddalingaiah&#xff09;&#xff0c;杰…

HTTP与服务器的四种交互方式

Http定义了与服务器交互的不同方法&#xff0c;最基本的方法有4种&#xff0c;分别是GET&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE。URL全称是资源描述符&#xff0c;我们可以这样认为&#xff1a;一个URL地址&#xff0c;它用于描述一个网络上的资源&#xff0c;而H…

ubuntu 以太网已连接但是无法联网_工业以太网有多“牛X”?两个案例告诉你

现代生活中&#xff0c;工业以太网发挥的作用愈来愈重要。为增进大家对工业以太网的认识&#xff0c;本文将基于3方面介绍工业以太网&#xff1a;何为工业以太网物理层&#xff1f;工业以太网具有哪些优势&#xff1f;工业以太网两大方案介绍。如果你对工业以太网具有兴趣&…