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

推薦する

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

Vue ルーター vue-router 詳細説明ガイド

中国語ドキュメント: https://router.vuejs.org/zh/ Vue Router...

nginx 設定ファイルで環境変数を使用する方法

序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...

MySQL クエリ データベース容量方法手順

すべてのデータベースの合計サイズを照会する方法は次のとおりです。 mysql> informa...

MySQL 5.7.17 最新インストールチュートリアル(画像とテキスト付き)

mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...

InnoDB エンジンのパフォーマンスを最適化するための my.cnf パラメータ構成

私はインターネット上で数え切れないほどの my.cnf 構成を読みましたが、言及されている構成のほと...

Linuxは数字当てゲームのソースコードを実装する

シンプルな Linux 推測ゲームのソースコードゲームのルール:数字当てゲームは通常 2 人でプレイ...

HTMLの水平線注釈とコードコメントの使い方をマスターするだけです

水平線<hr /> タグを使用して、現在の位置に水平の分割線を描画します。例: XML/...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

JavaScript ベースのパスワード ボックス検証情報の実装

この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...

JavaScriptの浅いコピーと深いコピーについての簡単な説明

目次1. 直接譲渡2. 浅いコピー3. ディープコピー1. JSONオブジェクトメソッド2. 再帰コ...

Vue グローバルメソッドを設定する 2 つの方法

目次1. はじめに2. 最初の方法3. 2番目の方法要約する1. はじめにVue プロジェクトの開発...

カレンダーウィジェットのネイティブJS実装

この記事の例では、カレンダーウィジェットを実装するためのjsの具体的なコードを参考までに共有していま...

コード分​​析を実現するためのFastDFSとNginxの統合

FastDFSとNginxの統合:トラッカーは、負荷分散と高可用性のために Nginx と組み合わせ...

期間限定フラッシュセール機能を実現するJavaScriptタイマー

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...