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

推薦する

DockerにJava環境をインストールするための実装手順

この記事は Linux centos8 をベースにして、docker をインストールし、イメージをプ...

Centos 7 64 ビット デスクトップ バージョンのインストール グラフィック チュートリアル

システムが遅いと感じてソースを変更したい場合は、別の記事で整理しました https://blog.c...

Linux ファイアウォールの状態確認方法の例

Linuxファイアウォールの状態を確認する方法1. 基本操作 # ファイアウォールのステータスを表示...

MySQL マスター/スレーブ データベース同期構成と一般的なエラー

アクセス回数が増えると、時間のかかるデータベース読み取り操作では、データベースへの負荷を軽減するため...

MySQLデータベースのトランザクションとインデックスの詳細な説明

目次1. 事務:取引の 4 つの主な特徴:同時トランザクションはどのような問題を引き起こしますか? ...

JavaScript 高度なカスタム例外

目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...

MySQL で特殊文字を含むデータベース名を作成する方法の例

序文この記事では、MySQL で特殊文字を使用してデータベース名を作成する方法について説明します。こ...

vue+echarts で中国地図のフロー効果を実現する (詳細な手順)

@vue+echarts は中国地図のフロー効果を実現します#レンダリングを見てみましょう手順:コ...

mysqlは複数の主キーを設定する操作を実装します

ユーザーテーブル、ID番号は一意である必要があります、携帯電話番号、電子メールアドレスは一意である必...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

HTML 内の CSS および JS リンクのバージョン番号 (キャッシュを更新)

背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...

HTML テーブル境界コントロールの詳細な説明

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

ZabbixはPSK共有キーを使用してサーバーとエージェント間の通信を暗号化します。

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...

Alibaba Cloud centos7にmysql8.0.22をインストールする詳細なチュートリアル

1. MySQLインストールパッケージをダウンロードするまず、https://dev.mysql.c...

Linux でショートカットアイコンを設定する方法

序文Linux でショートカットを作成すると、アプリケーションをより速く開くことができます。ここで、...