ホームページ  >  記事  >  バックエンド開発  >  Laravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

Laravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

Mini
Miniオリジナル
2020-05-20 11:27:52150ブラウズ

このケースでは、Laravel5.6 + Alibaba Cloud OSS を使用して画像アップロード機能を完了します。実践的な情報が満載で、手順に従って完了できます。

環境をデプロイする前に、Alibaba Cloud プラットフォームに個人アカウントまたは企業アカウントのアカウントを登録する必要があります。登録が完了したら、プロジェクト内の access_key および access_secret 構成をコピーして、基本設定を完了します。プロジェクトの。

1. 新しいプロジェクトを作成し、Laravel 5.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 + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

注: Composer の具体的なインストールについては、上記のリンクを参照し、ドキュメントに従ってインストールしてください。次に、Larvael5.6 フレームワークを具体的にインストールします。コントロール ウィンドウに内容を入力します。 Windows オペレーティング システム)、インストールが完了するまで待ちます。

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

インストールが完了したら、次のコードを実行して、アプリケーションにランダムな文字列キーを設定します。

php artisan key:generate

ブラウザに http://localhost/blog/public/index.php と入力すると、以下のインターフェースが表示されれば正常にアクセスできます。

Laravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

3.composer.json で Alibaba Cloud コンポーネント パッケージを設定します

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 + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

コンポーネントがダウンロードされると、以下のようになります:

Laravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

4. Alibaba Cloudのaccess_keyとaccess_secret設定を設定します(OSSの自動有効化)

これは非常に重要です:構成

ステップ 1: config/app.php のプロバイダーの下に

Jacobcyl\AliOSS\AliOssServiceProvider::class,

を追加します。 ステップ 2: app/filesystems.php のディスクの下に

'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,
],

を追加します。 ステップ 3: これに新しいファイル 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一致即可
];

を作成します。ファイルがロードされました。

2. インターフェイスコントローラーメソッドを作成します

新しいコントローラーを作成します: UploadsController は操作を容易にするためにコントローラークラスを継承します。

ステップ 1: API ルートを作成する

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


ステップ 2: コントローラーを作成し、画像 (コア コード) をアップロードする

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),
      ]);
}

4. Postman ツール インターフェイスのテスト

Laravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成

パブリック アカウント (Laravel テクノロジー コミュニティ ) 「Alibaba Cloud OSS」と返信し、ケースのソースコードをダウンロードします。

以上がLaravel + Alibaba Cloud OSS により画像とテキストの分離アーキテクチャが完成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。