VueはOSSを使用して画像や添付ファイルをアップロードします

VueはOSSを使用して画像や添付ファイルをアップロードします

OSS を使用して Vue プロジェクトに画像や添付ファイルをアップロードする

ここでは、写真のアップロードと添付ファイルのアップロードに違いはなく、アップロードのプロセスは同じです。

1. 新しい oss.js ファイルを作成し、oss をカプセル化して使用します (ali-oss パッケージをインストールする必要があります)

const OSS = require('ali-oss')

定数OSSConfig = {
  uploadHost: 'http://xxxxx.oss-cn-shenzhen.aliyuncs.com', //OSSアップロードアドレスossParams: {
    地域: 'oss-cn-shenzhen',
    success_action_status: '200', // デフォルトは 200
    アクセスキーID: 'LTxxxxxxxxxxxxxxxvnkD',
    アクセスキーシークレット: 'J6xxxxxxxxxxxxxxxxiuv',
    バケット: 'xxxxxxxx-czx'、
  },
}

関数 random_string(len) {
  長さ = 長さ || 32
  var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  var maxPos = 文字数.長さ
  var pwd = ''
  (i = 0; i < len; i++) の場合 {
    pwd += chars.charAt(Math.floor(Math.random() * maxPos))
  }
  パスワードを返す
}

関数 uploadOSS(ファイル) {
  新しい Promise(async (resolve, reject) => { を返します。
    const ファイル名 = `${ランダム文字列(6)}_${ファイル名}`
    クライアント = 新しいOSS({
      リージョン: OSSConfig.ossParams.region、
      アクセスキーID: OSSConfig.ossParams.accessKeyId、
      アクセスキーシークレット: OSSConfig.ossParams.accessKeySecret、
      バケット: OSSConfig.ossParams.bucket、
    })
    const res = client.multipartUpload(ファイル名、ファイル) を待機します。
    // 解決(res)
    // または次のように返します:
    解決する({
        ファイル URL: `${OSSConfig.uploadHost}/${fileName}`,
        ファイル名: ファイル名
    })
  })
}

エクスポート { uploadOSS }

2. ページでoss.jsを使用する

これは、elementUI アップロード コンポーネントの 2 次カプセル化です。コンポーネント アクションは画像や添付ファイルのアップロードには使用されませんが、OSS アップロード メソッドが使用されます。

<テンプレート>
  <div class="ファイルのアップロード">
    <el-アップロード
      ref="ファイルアップロード"
      アクション=""
      :headers="アップロードプロパティのヘッダー"
      リストタイプ="絵カード"
      :ファイルリストを表示="false"
      :http-request="fnアップロードリクエスト"
      :on-success="ハンドル成功"
      :on-error="エラー処理"
      :before-upload="handleUpload"
    >
      <スロット></スロット>
    </el-アップロード>
  </div>
</テンプレート>

<スクリプト>
"@/utils/auth" から { getAccessToken、getRefreshToken、getAccessTokenTTL } をインポートします。
'@/utils/oss' から { uploadOSS } をインポートします。

エクスポートデフォルト{
  名前: "インデックス",
  データ() {
    戻る {};
  },
  計算: {
    ユーザーアカウントID() {
      this.$store.state.user.userAccountID を返します。
    },
    アップロードプロパティ() {
      戻る {
        // アクション: `${process.env.VUE_APP_BASE_API}/api/file/upload`,
        ヘッダー: {
          // インターフェースにはトークンが必要な場合があります: "",
          認証: getAccessToken(),
        },
        データ: {}、
      };
    },
  },
  メソッド: {
    handleExceed(ファイル、ファイルリスト){
      // console.log(ファイル、ファイルリスト);
      this.$message.error('アップロードに失敗しました。アップロードできるファイルは 10 ファイルまでに制限してください。');
    },
    handleUpload(ファイル、ファイルリスト){
      // console.log(ファイル、ファイルリスト);
      var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
      const extension = testmsg === 'xlsx' || testmsg === 'xls' || testmsg === 'docx' || testmsg === 'doc'
        || testmsg === 'pdf' || testmsg === 'zip' || testmsg === 'rar' || testmsg === 'ppt' || testmsg === 'txt'

      定数isLimit10M = ファイルサイズ / 1024 / 1024 < 10
      var ブール値 = false;
      if(拡張子 && isLimit10M){
        ブール値 = true;
      } それ以外 {
        ブール値 = false;
      }
      if(!拡張子) {
        this.$message.error('添付ファイルの種類を選択してください!');
        ブール値を返します。
      }
      if(!isLimit10M) {
        this.$message.error('アップロードに失敗しました。10Mを超えることはできません!');
        ブール値を返します。
      }
      ブール値を返します。
    },
    ハンドル成功(res) {
      // コンソールログ(res);
      もし(res){
        this.$emit('fileData', res)
        this.$message.success("添付ファイルが正常にアップロードされました!");
      }
    },
    ハンドルエラー(err){
      this.$message.error('添付ファイルのアップロードに失敗しました!');
    },
    // 画像をアップロード async fnUploadRequest(options) {
      試す {
        // console.log(オプション);
        let file = options.file; // ファイルを取得する
        res = await uploadOSS(ファイル) とします。
        コンソールログ(res);
        //データを返します this.$emit("fileData", res);
        this.$message.success("添付ファイルが正常にアップロードされました!");
      } キャッチ (e) {
        this.$message.error('添付ファイルのアップロードに失敗しました!');
      }
    },
  },
};
</スクリプト>

<style lang="scss" スコープ>
::v-deep .el-アップロード、
.el-upload--画像カード{
  // 幅: 50px;
  高さ: 0px;
  境界線: なし;
  行の高さ: 0;
  表示: ブロック;
  背景: #f5f6fb;
}
.el-アップロード{
  幅: 50px;
}
.img-続き{
  幅: 50px;
  高さ: 24px;
  背景: #f5f6fb;
  .imgアイコン{
    色: #ccc;
  }
  .img-テキスト {
    フォントサイズ: 12px;
    高さ: 24px;
    色: #000;
  }
}
</スタイル>

カプセル化されたアップロードコンポーネントを使用する

  	<div class="タスクの詳細pr">
        <el-form-item label="報告理由" prop="taskDesc" 必須>
          <div class="flex-center アップロード位置">
            <ImgUpload @imgData="imgData" />
            <FileUpload クラス="ml10" @fileData="fileData" />
          </div>
          <el-入力
            タイプ="テキストエリア"
            v-model="ruleForm.taskDesc"
            placeholder="報告の理由を入力してください"
            最大長 = "200"
            @input="checkiptTaskDesc()"
          </el-input> ...
          <div class="ipt-taskDesc-length">{{checkIptTaskDescLen}}/200</div>
          <div class="img-list mt10 flex">
            <ImgZoomIn :imagesList="画像リスト" @deleteImg="deleteImg"></ImgZoomIn>
          </div>
          <div class="dotted-line" v-if="imagesList.length > 0 && filesList.length > 0"></div>
          <div class="ファイルアイテム">
            <HandleFile :filesList="ファイルリスト" @deleteFile="削除ファイル"></HandleFile>
          </div>
        </el-form-item>
      </div>

ここに画像の説明を挿入

効果は以下のとおりです

ここに画像の説明を挿入

これで、vue が OSS を使用して画像や添付ファイルをアップロードする方法についての説明は終わりです。vue が OSS を使用して画像や添付ファイルをアップロードする方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+element+oss はフロントエンドのフラグメントアップロードとブレークポイント再開を実現します
  • ファイルアップロード機能を実現するVue Element UI + OSS
  • Vue.js を使用して Alibaba Cloud OSS ストレージに画像をアップロードする方法の例
  • VueでOSSに画像をアップロードする方法の例(画像には削除機能があります)
  • VueページでAli OSSアップロード機能を使用する例(パート2)
  • VueページでAli OSSアップロード機能を使用する例(I)

<<:  MySQLの複合インデックス方式の詳細な説明

>>:  クラウドサーバーを購入し、Alibaba Cloud に Pagoda Panel をインストールする手順

推薦する

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要

序文最近、古いプロジェクトから残ったいくつかの SQL 最適化の問題に対処するのに忙しくしています。...

Linux FTP匿名アップロードとダウンロードが自動的に開始される問題を解決する

勉強や仕事で FTP サーバーを頻繁に使用する場合は、起動時に自動的に起動するように設定できます。設...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

ウェブサイトの速度を上げる6つの方法

1. .js ライブラリ ファイルのアドレスを Google CDN アドレスに置き換えます。 (G...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

Element における複数データ読み込み最適化の実装

目次シナリオコードの実装要約:シナリオ最近、ElementUI をベースにしたバックグラウンド管理シ...

CSS を使用して 3 つのステップでショッピング モールのカード クーポンを作成する

今日は618日、主要なショッピングモールはすべてプロモーション活動を行っています。今日は、次のように...

Linuxシステムにおけるキー認証に基づくSSHサービスのプロセス

ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...

MySQL 5.7.16 無料インストール版のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

CSS3はトランジション効果を実現するためにtransitionプロパティを使用する。

物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...

CSS を使用して 3 列のアダプティブ レイアウト (両側は固定幅、中央はアダプティブ) を実現します。

いわゆる 3 列適応レイアウトとは、両側の幅が固定され、中央のブロックの幅が適応されることを意味しま...