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 のインストールと使用方法のチュートリアル

推薦する

MySQL の昇順および降順データソートの実装

データの昇順、降順ソート1. フィールド名による単一フィールドのソート順機能:どのフィールドを基準に...

vue-cropperプラグインは、画像キャプチャとアップロードコンポーネントのカプセル化を実現します。

vue-cropperプラグインをベースにした画像キャプチャとアップロードコンポーネントをカプセル...

Linux CentOS 6.5 ifconfig が IP を照会できない問題の解決方法

最近、何人かの友人から、仮想マシンに CentOS をインストールした後、ifconfig コマンド...

Nginx サービスを使用してサブドメイン環境を構築し、2D マップの読み込みパフォーマンスを向上させる方法を説明します。

1. 背景最近、友人が大規模なマップの読み込みが遅いという問題に遭遇しました。iServer のパ...

XHTML と CSS によるオブジェクト指向プログラミング

<br />XHTML と CSS がオブジェクト指向だったらよかったのに。 。太陽は北...

Webフロントエンドツール、Sublime Text 2の紹介

Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

VMware Workstation Pro は Win10 ピュア バージョンのオペレーティング システムをインストールします

この記事では、VMware Workstation Pro で Win10 オペレーティング システ...

Docker プルタイムアウトの解決策

最近、Docker イメージのプルが非常に不安定です。遅く、タイムアウトすることがよくあります。 x...

docker run 起動パラメータ コマンドを表示する方法 (推奨)

runlike を使用してコンテナの docker run 起動パラメータを表示します。 pipを...

Vueのカスタムディレクティブの詳細なガイド

目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

iframe 適応サイズ実装コード

ページドメインの関係:メインページ a.html はドメイン A: www.jb51.net に属し...

MySQL infobrightのインストール手順

目次1. 次のように、「rpm -ivh インストール パッケージ」コマンドを使用して rpm パッ...

htmlダウンロード機能の詳しい説明

新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...