Vue.jsクラウドストレージで画像アップロード機能を実現

Vue.jsクラウドストレージで画像アップロード機能を実現

序文

ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。

1. オブジェクトストレージ

Cloud Object Storage (COS) は、Tencent Cloud が提供する、大量のファイルを保存するための分散ストレージ サービスです。高いスケーラビリティ、低コスト、信頼性、セキュリティなどの利点があります。ユーザーは、コンソール、API、SDK、ツールなどのさまざまな方法を通じて、COS に簡単かつ迅速にアクセスし、複数の形式のファイルをアップロード、ダウンロード、管理し、大量のデータの保存と管理を実現できます。

2. Tencent Cloud Cosを構成する

1. ライブラリをインポートする

コードは次のとおりです(例):
目標: Tencent Cloud cosを構成する
クラス開発の特殊性により、すべての写真を自社の公式サーバーにアップロードしたくありません。ここでは、Tencent Cloud の写真ソリューションを使用できます。

ここに画像の説明を挿入

最初のステップは、Tencent Cloud開発者アカウントを取得することです

実名認証

ここに画像の説明を挿入

次にQRコードをスキャンして認証します

ここに画像の説明を挿入

無料製品を入手するにはここをクリックしてください

ここに画像の説明を挿入

オブジェクトストレージCOSを選択

ここに画像の説明を挿入

この時点でアカウント部分は完了です。次に、写真を保存するためのバケットを作成する必要があります。オブジェクトストレージコンソールにログインし、バケットを作成します。バケットの権限をパブリック読み取りとプライベート書き込みに設定する

バケットを作成する

ここに画像の説明を挿入

CORSルールの設定

ここに画像の説明を挿入

AllowHeader を * に設定する必要があります。
この時点で、Tencent Cloud ストレージ バケットが設定されました。

3. 新しいファイルアップロードコンポーネントを作成する

JavaScript SDKのインストール

npm i cos-js-sdk-v5 --save

新しいアップロード画像コンポーネント src/components/ImageUpload/index.vue を作成します。

アップロードコンポーネントには、要素のel-uploadコンポーネントを使用し、フォトウォールモードlisttype="picture-card"を採用することができます。

<テンプレート>
  <div>
    <el-アップロード
      リストタイプ="絵カード"
      :limit="4"
      アクション="#"
      :file-list="ファイルリスト"
      :on-preview="プレビュー"
      :http-request="アップロード"
      :on-change="変更"
      :before-upload="アップロード前"
      :accept="typeList"
      :on-remove="ハンドル削除"
    >
      <i class="el-icon-plus" />
    </el-アップロード>
    <el-進捗状況
      v-if="表示パーセント"
      スタイル="幅: 180px"
      :percentage="パーセント"
    />
    <el-dialog title="画像" :visible.sync="showDialog">
      <img :src="imgUrl" style="width: 100%" alt="" />
    </el-ダイアログ>
  </div>
</テンプレート>
<スクリプト>
'cos-js-sdk-v5' から COS をインポートします。
定数cos = 新しいCOS({
  SecretId: 'xxx', // シークレット ID
  SecretKey: 'xxx' // 秘密鍵
}) // インスタンス化されたパッケージはアップロード機能があり、アカウントのストレージバケットにアップロードできます export default {
  データ() {
    戻る {
      fileList: [], // 画像アドレスを配列に設定する showDialog: false, // ポップアップレイヤーの表示を制御する imgUrl: '',
      現在のイメージUid: null、
      タイプリスト: 'image/*',
      showPercent: false, // 進行状況バーを表示するかどうか percent: 0 // アップロードの進行状況}
  },
  メソッド: {
    プレビュー(ファイル) {
      this.imgUrl = ファイル.url
      this.showDialog = true
    },
    beforeUpload(ファイル) {
      // アップロードできるファイルの種類 const types = ['image/jpeg', 'image/gif', 'image/bmp', 'image/png']
      if (!types.includes(file.type)) {
        this.$message.error('アップロードできる画像は JPG、GIF、BMP、または PNG 形式のみです!')
        false を返す // false を返すと、画像はアップロードされません}
      定数maxSize = 1024 * 1024
      ファイルサイズが最大サイズより大きい場合
        this.$message.error('画像の最大サイズは 1M を超えることはできません')
        偽を返す
      }
      this.currentImageUid = ファイル.uid
      this.showPercent = true
      真を返す
    },
    アップロード(パラメータ) {
      // console.log(パラメータ.ファイル)
      if (params.file) {
        // アップロード操作を実行する cos.putObject({
          Bucket: 'xxx', // ストレージバケット Region: 'ap-nanjing', // リージョンキー: params.file.name, // ファイル名 Body: params.file, // アップロードするファイルオブジェクト StorageClass: 'STANDARD', // アップロードモードタイプはデフォルトで標準モードに直接設定できます onProgress: (progressData) => {
            this.percent = 進捗データ.percent * 100
          }
        }, (エラー、データ) => {
          // データが返された後の処理方法 if (err) return
          this.fileList = this.fileList.map(item => {
            if (item.uid === this.currentImageUid) {
              戻り値: { url: 'http://' + data.Location, name: item.name }
            }
            返品商品
          })
          // コンソール.log(this.fileList)
        })
      }
    },
    handleRemove(ファイル、ファイルリスト) {
      this.fileList = this.fileList.filter(item => item.uid !== file.uid)
      // console.log(ファイル)
      cos.deleteObject({
        バケット: 'xxx'、/* 必須*/
        地域: 'ap-nanjing'、/* バケットが配置されている地域、必須フィールド*/
        キー: file.name /* 必須*/
      }, (エラー、データ) => {
        // console.log(エラー || データ)
      })
    },
    変更(ファイル、ファイルリスト) {
      this.fileList = ファイルリスト
    }
  }
}
</スクリプト>

詳細ページではコンポーネントを紹介します

<テンプレート>
  <div class="アプリコンテナ">
    <el-card>
      <el-タブ>
        <el-tab-pane label="個人情報">
          <ユーザー情報 />
        </el-tab-pane>
        <el-tab-pane label="パスワードのリセット">
          <!-- フォームを配置します -->
          <el-フォーム
            ラベル幅="120px"
            スタイル="margin-left: 120px; margin-top: 30px"
          >
            <el-form-item label="パスワード:">
              <el-input style="width: 300px" type="password" />
            </el-form-item>
            <el-form-item label="パスワードの確認:">
              <el-input style="width: 300px" type="password" />
            </el-form-item>
            <el-form-item>
              <el-button type="primary">リセット</el-button>
            </el-form-item>
          </el-form>
        </el-tab-pane>
        <el-tab-pane label="部門情報">
          <部門 />
        </el-tab-pane>
        <el-tab-pane label="アバターを選択">
          <画像アップロード />
        </el-tab-pane>
      </el-tabs>
    </el-card>
  </div>
</テンプレート>
<スクリプト>
'./component/Userinfo' から userInfo をインポートします。
'./component/Department' から部門をインポートします。
'@/components/ImagUpload' から imageUpload をインポートします。

エクスポートデフォルト({
  コンポーネント:
   'ユーザー情報': ユーザー情報、
   '部門': 部門、
   '画像アップロード': 画像のアップロード
  },
  // 
    メソッド: {
    アップロード(e) {
      定数ファイル = e.target.files[0]
      const リーダー = 新しい FileReader()
      reader.readAsDataURL(ファイル)
      reader.onload = 非同期関数 (e) {
        アップロードを待つ({
          ファイル: {
            元の名前: '11.jpg',
            ファイル: e.target.result
          }
        })
      }
    }
  }

})
</スクリプト>

詳細ページのルートを作成します。現在の「ビュー」はセカンダリナビゲーションジャンプなので、ルートは次のように記述する必要があります。

'@/layout' からレイアウトをインポートします
エクスポートデフォルト{
  パス: '/user',
  コンポーネント: レイアウト、
  子供たち: [{
    パス: 'インデックス',
    コンポーネント: () => import('@/views/user/index'),
    名前: 'ユーザー',
    メタ: {
      タイトル:「ユーザー管理」
      アイコン: 'アカウント'
    }
  },
  {
    パス: '詳細',
    コンポーネント: () => import('@/views/user/detail'),
    名前: '詳細',
    非表示: true、
    メタ: {
      タイトル: 「ユーザーの詳細」
      アイコン: 'アカウント'
    }
  }]
}

ここに画像の説明を挿入

レンダリング

クリックして表示:

ここに画像の説明を挿入

アバターを選択してください:

ここに画像の説明を挿入

ここに画像の説明を挿入

クラウド ストレージにアップロードされているかどうかを確認します。

ここに画像の説明を挿入

これで、vue.js クラウド ストレージを使用して画像アップロード機能を実装する方法についての説明は終わりです。vue.js 画像アップロードに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+SSMは画像アップロードのプレビュー効果を実現します
  • Vue+Element+Springboot画像アップロードの実装例
  • 写真をアップロードして顔を認識する Vue+axios サンプルコード
  • Vue で axios を使用して画像をアップロードするときに発生する問題
  • Vue ページ内の公開マルチタイプ添付画像アップロード領域と適用可能な折りたたみパネル (サンプルコード)

<<:  Ubuntu環境でxdebugをコンパイルしてインストールする方法

>>:  MySQL 8.0.12 のインストールと使用方法のチュートリアル

推薦する

ES6 Promiseの使い方の詳細な説明

目次約束とは何ですか?拒否の使用法キャッチの使い方すべての使用法レースの使用約束とは何ですか? Pr...

Ubuntu で nvidia グラフィック ドライバーをインストールする (簡単なインストール方法)

Ubuntu で nvidia グラフィック カード ドライバーをインストールします。同じ方法で ...

Vue ディレクティブ v-html と v-text

目次1. v-text テキストレンダリング命令2. v-html 1. v-text テキストレン...

DockerコンテナにNFS共有ディレクトリをマウントする実装

以前、https://www.jb51.net/article/205922.htm で、Docke...

vue-seamless-scrollがスクロールしていいねをするときのデータ同期の問題を解決する

VUE は vue-seamless-scroll を使用して、自動的にスクロールしていいねします。...

Vueページの画像が表示されない問題の解決方法

新しいバージョンの設定インターフェースを作る際に、vueフレームワークを使用して実装しました。ページ...

Web 標準アプリケーション: Tencent QQ ホームページの再設計

Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...

複数レベルの複雑な動的ヘッダーの avue-crud 実装例

目次序文バックグラウンドデータの結合フロントエンドデータ表示ページ効果表示Avue.js は、既存の...

jQuery キャンバスで画像検証コード例を描画する

この記事では、jQuery Canvasの描画画像検証コードの具体的なコードを例として紹介します。具...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

Nginx をベースに特定の IP への短期アクセス数を制限する

特定の期間内に特定の IP へのアクセス回数を制限する方法は、特に悪意のある DDOS 攻撃に直面し...

Vue 折りたたみ表示の複数行テキスト コンポーネントの実装コード

折りたたみ表示の複数行テキストコンポーネント複数行のテキスト コンポーネントを折りたたんで表示し、展...

Dockerプライベートライブラリの実装

プライベート Docker レジストリのインストールとデプロイは、Docker テクノロジーを導入、...

MySQL 8.0.23 メジャーアップデート (新機能)

著者: Guan Changlong は、Aikesheng の配送サービス部門の DBA です。主...

負荷分散と動的・静的分離を実現するNginx+Tomcatの原理の分析

1. Nginx ロードバランシングの実装原理1. Nginxはリバースプロキシを通じて負荷分散を実...