Laravel 使用 Aliyun OSS 云存儲

對象存儲 ( Object Storage Service, 簡稱 OSS ) OSS 相信大家都聽過, 它是阿里云對外提供的海量, 安全和高可靠的云存儲服務. 大家可以把自己網站的資源存上面加快自己網站速度, aliyun 官網也有文檔不過對于新手來說有點難, 那么這里我給大家推薦一個組件和組件的使用.

johnlui/aliyun-oss?這個組件是?John Lui?作者封裝好的組件, 用法超簡單, 不過這個組件有許多要注意的地方, 不然出錯了, 掉坑里爬不出來!

安裝

composer require "johnlui/aliyun-oss"  

配置

組件下載完成之后, 作者的 GitHub 上面說需要在?app/config/app.php?中增加四項配置, 我建議在?app/config?下面新建一個?alioss.php?文件然后在添加配置:

<?php  
return [  'ossServer' => env('ALIOSS_SERVER', null),                      // 外網'ossServerInternal' => env('ALIOSS_SERVERINTERNAL', null),      // 內網'AccessKeyId' => env('ALIOSS_KEYID', null),                     // key'AccessKeySecret' => env('ALIOSS_KEYSECRET', null),             // secret'BucketName' => env('ALIOSS_BUCKETNAME', null)                  // bucket
];

然后在?.ENV?文件里面把配置信息都填上.

注意

這里有一個大坑, 粗心的朋友一般不會發現, 在填寫外網和公網配置的時候, 有的朋友直接在 OSS 管理控制臺中把外網和內網一長串的鏈接復制走, 如下圖:

file

在這個組件中, 桶名稱是需要額外填寫的, 所以外網和內網哪兒, 只需要填寫桶名后面的內容, 如圖:

file

再有一點是填寫外網和內網的時候需要加上?http://?協議, 不然后面出錯你又得掉坑半天出不來, 最終配置信息如下圖:

file

構建 Service 文件

后臺需要一個?Service?文件, 在?app/Service?下新建一個?oss.php?文件, 由于前面步驟我把配置文件放在?app/config/alioss.php?里面, 所以還要對原作者給出的例子作修改下, 如下代碼:

# oss.php
<?phpnamespace App\Services;use JohnLui\AliyunOSS\AliyunOSS;class OSS  
{private $ossClient;private static $bucketName;public function __construct($isInternal = false){$serverAddress = $isInternal ? config('alioss.ossServerInternal') : config('alioss.ossServer');$this->ossClient = AliyunOSS::boot($serverAddress,config('alioss.AccessKeyId'),config('alioss.AccessKeySecret'));}public static function upload($ossKey, $filePath){$oss = new OSS(false); // 上傳文件使用內網,免流量費$oss->ossClient->setBucket(config('alioss.BucketName'));$res = $oss->ossClient->uploadFile($ossKey, $filePath);return $res;}/*** 直接把變量內容上傳到oss* @param $osskey* @param $content*/public static function uploadContent($osskey, $content){$oss = new OSS(false); // 上傳文件使用內網,免流量費$oss->ossClient->setBucket(config('alioss.BucketName'));$oss->ossClient->uploadContent($osskey, $content);}/*** 刪除存儲在oss中的文件** @param string $ossKey 存儲的key(文件路徑和文件名)* @return*/public static function deleteObject($ossKey){$oss = new OSS(false); // 上傳文件使用內網,免流量費return $oss->ossClient->deleteObject(config('alioss.BucketName'), $ossKey);}/*** 復制存儲在阿里云OSS中的Object** @param string $sourceBuckt 復制的源Bucket* @param string $sourceKey - 復制的的源Object的Key* @param string $destBucket - 復制的目的Bucket* @param string $destKey - 復制的目的Object的Key* @return Models\CopyObjectResult*/public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey){$oss = new OSS(true); // 上傳文件使用內網,免流量費return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);}/*** 移動存儲在阿里云OSS中的Object** @param string $sourceBuckt 復制的源Bucket* @param string $sourceKey - 復制的的源Object的Key* @param string $destBucket - 復制的目的Bucket* @param string $destKey - 復制的目的Object的Key* @return Models\CopyObjectResult*/public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey){$oss = new OSS(true); // 上傳文件使用內網,免流量費return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);}public static function getUrl($ossKey){$oss = new OSS();$oss->ossClient->setBucket(config('alioss.BucketName'));return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));}public static function createBucket($bucketName){$oss = new OSS();return $oss->ossClient->createBucket($bucketName);}public static function getAllObjectKey($bucketName){$oss = new OSS();return $oss->ossClient->getAllObjectKey($bucketName);}/*** 獲取指定Object的元信息** @param  string $bucketName 源Bucket名稱* @param  string $key 存儲的key(文件路徑和文件名)* @return object 元信息*/public static function getObjectMeta($bucketName, $osskey){$oss = new OSS();return $oss->ossClient->getObjectMeta($bucketName, $osskey);}}

使用

首先引入命名空間?use App\Services\OSS;, 在?Laravel 5.1?中使用方法如下

// 獲取表單提交的圖片
$pic = $request->file('pic');
// 判斷圖片有效性
if (!$pic->isValid()) {  return back()->withErrors('上傳圖片無效..');
}
// 獲取圖片在臨時文件中的地址
$pic = $pic->getRealPath();
// 制作文件名
$key = time() . rand(10000, 99999999) . '.jpg';
//阿里 OSS 圖片上傳
$result = OSS::upload($key, $pic);
if ($result) {  // success
} else {// fail
}

注意:?如果你上傳長時間沒反應的話, 說明你上傳使用的是內網, 你得改成外網上傳, 找到?Service/oss.php?里面的?upload?方法, 將?$oss = new OSS(true);?true 改為 false, 上傳程序即可成功!

附上其他使用方法

OSS::upload('文件名', '本地路徑'); // 上傳一個文件echo OSS::getUrl('某個文件的名稱'); // 打印出某個文件的外網鏈接OSS::createBucket('一個字符串'); // 新增一個 Bucket。注意,Bucket 名稱具有全局唯一性,也就是說跟其他人的 Bucket 名稱也不能相同。OSS::getAllObjectKey('某個 Bucket 名稱'); // 獲取該 Bucket 中所有文件的文件名,返回 Array。  

原文出處

轉載于:https://www.cnblogs.com/jhcyzxx/p/10479898.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449732.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python多級索引修改

創建多級索引 cols pd.MultiIndex.from_tuples([("a","b"), ("a","c")]) pd.DataFrame([[1,2], [3,4]], columnscols) abc012134 df.columns df.columns.droplevel() df bc012134

在線學習新編程 技巧全攻略

摘要&#xff1a;有句俗語叫&#xff1a;“技多不壓身”&#xff0c;如果你有時間和興趣&#xff0c;不妨多了解和掌握編程技能&#xff0c;或許隨時可能有用。本文為你收集了一些編程技巧&#xff0c;讓你輕松學編程。 有句俗語叫&#xff1a;“技多不壓身”&#xff0c;如果你…

第 3 章 鏡像 - 018 - 鏡像命名的最佳實踐

為鏡像命名 創建鏡像時 docker build 命令時已經為鏡像取了個名字&#xff0c;例如&#xff1a; docker build -t ubuntu-with-vi 這里的 ubuntu-with-vi 就是鏡像的名字。通過 dock images 可以查看鏡像的信息。 1 rootubuntu:~# docker images ubuntu-with-vi 2 REPOSITORY …

Jmeter邏輯控制器-ForEach Controller

ForEach Controller 介紹 ForEach Contoller 即循環控制器&#xff0c;顧名思義是定義一個規則。主要有以下一個參數&#xff1a;名稱&#xff1a;隨便填寫注釋&#xff1a;隨便填寫輸入變量前綴&#xff1a;可以在“用戶自定義變量”中定義一組變量。循環控制器可以從中獲取到…

微服務實戰(三):深入微服務架構的進程間通信

見&#xff1a;http://www.dockone.io/article/549簡介 在單體式應用中&#xff0c;各個模塊之間的調用是通過編程語言級別的方法或者函數來實現的。但是一個基于微服務的分布式應用是運行在多臺機器上的。一般來說&#xff0c;每個服務實例都是一個進程。因此&#xff0c;如下…

python輸出與刪除某行或某列

python輸出字符&#xff0c;主要為結合變量形成新的變量名 year 2016 event Referendum fResults of the {year} {event}Results of the 2016 Referendum yes_votes 42_572_654 no_votes 43_132_495 percentage yes_votes / (yes_votes no_votes) {:-9} YES votes {:2…

為什么應該用模塊取代C/C++中的頭文件?

摘要&#xff1a;本文整理自Apple C工程師Doug Gregor的演講Slide&#xff0c;他表示希望使用模塊&#xff08;Module&#xff09;這一概念替代C/C中的頭文件&#xff0c;現已被C標準化委員會任命為Module研究組的主席&#xff0c;研究該提議的可能性。考慮到Apple的開源項目LL…

北向資金進行股票、期貨指數、基金策略

#%%導入包 import tushare as ts import datetime import pandas as pd import numpy as np import akshare as ak import warnings warnings.filterwarnings("ignore")#獲取北向資金數據 df_data2 ak.stock_em_hsgt_north_acc_flow_in(indicator"北上") d…

Kong Api 初體驗、Kong安裝教程

見&#xff1a;https://blog.csdn.net/forezp/article/details/79383631Kong是一個可擴展的開源API層&#xff08;也稱為API網關或API中間件&#xff09;。 Kong運行在任何RESTful API的前面&#xff0c;并通過插件擴展&#xff0c;它們提供超出核心平臺的額外功能和服務。 Kon…

Spring Boot2.0+中,自定義配置類擴展springMVC的功能

在spring boot1.0&#xff0c;我們可以使用WebMvcConfigurerAdapter來擴展springMVC的功能&#xff0c;其中自定義的攔截器并不會攔截靜態資源&#xff08;js、css等&#xff09;。 Configuration public class MyMvcConfig extends WebMvcConfigurerAdapter {Overridepublic v…

從谷歌宕機事件認識互聯網工作原理

摘要&#xff1a;谷歌服務器經歷了短暫的宕機事件&#xff0c;持續大概27分鐘&#xff0c;對部分地區的互聯網用戶造成了影響。此次事件的原因深究起來需要進入互聯網絡那深邃的、黑暗的角落。 譯者注&#xff1a;本文中提到CloudFlare是一家總部位于美國舊金山的內容分發網絡(…

聊聊技術寫作的個人體會

有群友問過&#xff0c;是什么原因使我開始寫技術公眾號&#xff0c;又是什么動力讓我堅持寫的。 在我看來&#xff0c;寫作是一件不能敷衍的事&#xff0c;通過寫作來學習&#xff0c;反而要比單純地學習的效果要好。為了寫成一篇“拿得出手”的文章&#xff0c;我要反復查找資…

「2019冬令營提高組」全連

傳送門 顯然的 $dp$ 設 $f[i]$ 表示點擊第 $i$ 個音符時的最大價值&#xff0c;$t[i]$ 表示音符 $i$ 的準備時間 那么可以枚舉 $1$ 到 $i-t[i]$ 的所有音符&#xff0c;如果 $j$ &#xff0c;如果 $jt[j]$ 小于等于 $i$ &#xff0c;那么 $f[i]max(f[i],f[j]t[i]*val[i])$ 考慮…

Docker常用命令、超實用、講解清晰明了(rm、stop、start、kill、logs、diff、top、cp、restart ...)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 查看docker信息&#xff08;version、info&#xff09; # 查看docker版本 $docker version # 顯示docker系統的信息 $docker i…

推薦給開發人員的實用命令行工具

摘要&#xff1a;優秀的工具對于定位問題出在何處有著無可估量的價值&#xff0c;而且能在一開始就幫助我們阻止問題的出現&#xff0c;總的來說能使我們的工作更有效率。本文介紹了6個非常強大且靈活的工具&#xff0c;熟練使用這些工具能使你的生活變得更輕松一些。 作為一名…

雷軍:啟動手機+AIoT雙引擎戰略 5G春天到來前打持久戰

雷帝網 樂天 1月11日報道 小米CEO雷軍今日在小米年會上宣布&#xff0c;2019年&#xff0c;小米將正式啟動“手機AIoT”雙引擎戰略&#xff0c;這將是小米未來五年的核心戰略。未來5年&#xff0c;小米將在AIoT領域持續投入超過100億元。從2019年起&#xff0c;AIoT&#xff0c…

Jenkins自定義主題

x下載自定義樣式 http://afonsof.com/jenkins-material-theme/ 打開連接 最后點擊&#xff1a;DOWNLOAD TOUR THEME! 得到樣式文件&#xff1a;jenkins-material-theme.css 上傳樣式文件到jenkins 將jenkins-material-theme.css 上傳到&#xff1a; /var/jenkins_home/userCont…

SSH (Secure Shell)詳解

Secure Shell&#xff08;SSH&#xff09;是一種加密 網絡協議&#xff0c;用于在不安全的網絡上安全地運行網絡服務。 SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道&#xff0c;將SSH客戶端應用程序與SSH服務器相連接。 常見的應用程序包括遠程命令行登錄和遠程…

股票配對收益

import pandas as pd import numpy as npimport matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 字體設置 import matplotlib matplotlib.rcParams[axes.unicode_minus]False # 負號顯示問題from arch.unitroot import ADF …

YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24 static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) { int R,G,B,Y,U,V; int x,y; int nWidth width>>1; //色度信號寬度 for (y0;y<height;y) { for (x0;x<width;x) { …