首頁  >  文章  >  後端開發  >  Laravel + 阿里雲OSS 完成圖文分離架構

Laravel + 阿里雲OSS 完成圖文分離架構

Mini
Mini原創
2020-05-20 11:27:52149瀏覽

本案例採用 Laravel5.6 阿里雲OSS 完成圖片上傳功能,全是乾貨,依步驟操作即可完成。

在部署環境之前,我們需要去阿里雲平台註冊一個帳號,個人帳號和公司帳號都可以,註冊完成後,複製access_key和access_secret配置在專案中就完成了項目的基本設定。

一. 新建項目,安裝Laravel5.6版本的框架程式碼

1.環境設定需求

# #Laravel 對系統有一些要求,您的伺服器滿足下面的要求:

PHP >= 7.1.3

OpenSSL PHP

PHP PDO 擴充功能

PHP Mbstring 擴充功能

PHP Tokenizer 擴充功能

##PHP XML 擴充

PHP Ctype 擴充功能

PHP JSON 擴充功能

備註:您需要達到以上的設定要求,這個就不具體詳細說明,具體看php語法

2. 安裝Laravel5.6框架

Laravel5.6 使用Composer 來管理項目依賴。因此,在使用 Laravel5.6 之前,請確保你的機器已經安裝了 Composer。

composer -v
Laravel + 阿里雲OSS 完成圖文分離架構

備註:composer具體安裝請參考上面鏈接,按文檔安裝即可下面我們具體安裝Larvael5.6框架,在控制窗口輸入一下內容(本人windows作業系統),等待安裝完成。

composer create-project --prefer-dist laravel/laravel blog

安裝完成後執行以下程式碼,為應用程式設定隨機字串金鑰。

php artisan key:generate

在瀏覽器中輸入:http://localhost/blog/public/index.php,看到下列介面就是存取正常了。

Laravel + 阿里雲OSS 完成圖文分離架構

3.composer.json設定阿里雲元件套件

在require中新增"jacobcyl/ ali-oss-storage": "^2.1"

"require": {
      "php": "^7.1.3",
      "fideloper/proxy": "^4.0",
      "laravel/framework": "5.8.*",
      "laravel/tinker": "^1.0",
      "jacobcyl/ali-oss-storage": "^2.1"
   },

然後執行指令:

composer update
composer dumpautoload
Laravel + 阿里雲OSS 完成圖文分離架構

元件下載完成後,如下圖:

Laravel + 阿里雲OSS 完成圖文分離架構

4. 配置阿里雲access_key和access_secret配置(OSS自行開通)

這裡很關鍵:我的是單獨寫了一個檔案進行設定

第一步:在config/app.php的providers下新增:

Jacobcyl\AliOSS\AliOssServiceProvider::class,

第二步:在app/filesystems.php中的disks下新增

'oss' => [
    'driver' => 'oss',
    'access_id' => env('OSS_ACCESS_ID', '填你自己的'),
    'access_key' => env('OSS_ACCESS_KEY', '填你自己的'),
    'bucket' => env('OSS_BUCKET', '填你自己的'),
    'endpoint' => env('OSS_ENDPOINT', 'oss-cn-hangzhou.aliyuncs.com'),
    'isCName' => false,
    'debug' => true,
],

第三步:新檔案alioss.php檔案

<?php
return [
    &#39;OSS_ACCESS_ID&#39; => env(&#39;OSS_ACCESS_ID&#39;, &#39;填你自己的&#39;),
    &#39;OSS_ACCESS_KEY&#39;=> env(&#39;OSS_ACCESS_KEY&#39;, &#39;填你自己的&#39;),
    &#39;OSS_ENDPOINT&#39; => env(&#39;OSS_ENDPOINT&#39;, &#39;oss-cn-hangzhou.aliyuncs.com&#39;),
    &#39;OSS_BUCKET&#39; => env(&#39;OSS_BUCKET&#39;, &#39;填你自己的&#39;),
    &#39;OSS_HOST&#39; => &#39;https://填你自己的.oss-cn-hangzhou.aliyuncs.com&#39;,//前台显示域名
    &#39;OSS_URL&#39; => &#39;https://填你自己的.oss-cn-hangzhou.aliyuncs.com&#39;, // CDN域名,没有CDN就和OSS_HOST一致即可
];

到此檔案就已經載入完成。

二. 寫介面控制器方法

新控制器:UploadsController 繼承 Controller類,方便操作。

第一步:寫API路由

Route::post(&#39;/index/image&#39;, &#39;\App\Http\Controllers\Index\UploadsController@index&#39;);

第二步:寫控制器,上傳圖片(核心程式碼)

public function index(Request $request) {
      $disk = \Storage::disk(&#39;oss&#39;);
      if (!isset($request->image)) {
      return $this->array_format(&#39;图片信息错误&#39; . __LINE__, 414);
      }
      switch ($request->source) {
      case &#39;file&#39;:
      if (!($request->hasFile(&#39;image&#39;) && $request->file(&#39;image&#39;)->isValid())) {
      return $this->array_format(&#39;图片信息错误&#39; . __LINE__, 414);
      }
            $file = $request->file(&#39;image&#39;);
            $image_str = @file_get_contents($file->getPathname());
            $base64_str = base64_encode($image_str);
            break;
        case &#39;url&#39;:
          $image_str = @file_get_contents($request->image);
          $base64_str = base64_encode($image_str);
          break;
        case &#39;base64&#39;:
          $base64_str = $request->image;
          break;
        default:
          return $this->array_format(&#39;图片类型错误&#39;, 414);
          break;
      }
      //获取图片信息
      $image_info = $this->base64_image_format($base64_str);
      if (!$image_info) {
      return $this->array_format(&#39;图片信息错误&#39; . __LINE__, 414);
      }
      if ($image_info[&#39;image_size&#39;] > 10 * 1024 * 1024) {
      return $this->array_format(&#39;图片信息太大&#39;, 414);
      }
      $image_path = &#39;uploads/image/&#39;. date(&#39;Ym&#39;);
      $image_name = $image_path . &#39;/&#39; . md5($image_info[&#39;image_str&#39;]) . &#39;.&#39; . $image_info[&#39;image_suffix&#39;];
      //上传图片
      $temp = $disk->put($image_name, $image_info[&#39;image_str&#39;]);
      if (!$temp) {
      return $this->array_format(&#39;上传失败&#39;, 414);
      }
      return $this->array_format(&#39;上传成功&#39;, 200, [
          &#39;image_name&#39; => $image_name,
          &#39;image_url&#39; => $disk->url($image_name),
      ]);
}
四. Postman工具介面測試

Laravel + 阿里雲OSS 完成圖文分離架構

「大眾號(Laravel技術社群

)回覆「阿里雲OSS」,下載案例原始碼。 ###

以上是Laravel + 阿里雲OSS 完成圖文分離架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn