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 をインストールする手順

推薦する

MySQLの認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...

Vue で AES.js を使用する詳細な手順

AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...

CSS テキスト装飾 text-decoration と text-emphasis の詳細な説明

CSS では、テキストは私たちが毎日扱う最も一般的なものの 1 つです。テキストの場合、テキストの装...

あなたをエキスパートに見せるための 13 個の JavaScript ワンライナー

目次1. ランダムなブール値( true / false )を取得する2. 指定された日付が営業日で...

Linux での tcpdump コマンドの詳細な分析と使用方法

導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

LinuxにPHP7をインストールする方法の詳細な説明

Linux に PHP7 をインストールするにはどうすればいいですか? 1. 依存パッケージをインス...

ウェブデザインのためのロイヤルブルーのカラーマッチング入門

古典的な色の組み合わせは力と権威を伝え、強いロイヤルブルーはあらゆる古典的な色の組み合わせの中心的な...

Bootstrap 3.0 学習ノートのボタンとドロップダウン メニュー

前回の記事はBootstrap CSS部分の簡単なレビューであり、多くの詳細が見落とされていました。...

JavaScriptオブジェクト指向について学ぼう

目次JavaScript プロトタイプチェーンオブジェクトプロトタイプトップレベルのプロトタイプOb...

LinuxでIPアドレスを手動で設定するための詳細な手順

目次1.まずネットワークカードの設定ディレクトリに入る2. ifcfg-ens33ネットワークカード...

MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要

1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...

レスポンシブWebデザイン学習(1) - 画面サイズと使用率の決定

最近では、モバイルデバイスがますます普及しており、ユーザーがスマートフォンやタブレットを使用して W...

Python3.6-MySql 挿入ファイルパス、バックスラッシュをなくす解決策

以下のように表示されます。上記のように、置き換えるだけです。 Python3.6-MySql でファ...

Vueは大画面ページのスクリーン適応を実現します

この記事では、大画面ページのスクリーンアダプテーションを実現するためのVueの具体的なコードを参考ま...

MYSQLのバックアップデータのスケジュールクリアの特定の操作

1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...