Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion

Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion

Vorwort

Tipp: Das Folgende ist der Hauptinhalt dieses Artikels. Die folgenden Fälle können als Referenz verwendet werden

1. Objektspeicher

Cloud Object Storage (COS) ist ein von Tencent Cloud bereitgestellter verteilter Speicherdienst zum Speichern großer Dateien. Er bietet die Vorteile hoher Skalierbarkeit, niedriger Kosten, Zuverlässigkeit und Sicherheit. Über eine Vielzahl von Methoden wie Konsole, API, SDK und Tools können Benutzer einfach und schnell auf COS zugreifen, um Dateien in mehreren Formaten hochzuladen, herunterzuladen und zu verwalten und die Speicherung und Verwaltung riesiger Datenmengen zu realisieren.

2. Tencent Cloud Cos konfigurieren

1. Bibliothek importieren

Der Code lautet wie folgt (Beispiel):
Ziel: Ein Tencent Cloud-Unternehmen konfigurieren
Aufgrund der Besonderheiten der Klassenentwicklung möchten wir nicht alle Bilder auf unseren eigenen offiziellen Server hochladen. Hier können wir eine Tencent Cloud-Bildlösung verwenden.

Bildbeschreibung hier einfügen

Der erste Schritt besteht darin, ein Tencent Cloud-Entwicklerkonto zu haben

Echtnamenauthentifizierung

Bildbeschreibung hier einfügen

Scannen Sie anschließend den QR-Code zur Autorisierung

Bildbeschreibung hier einfügen

Klicken Sie hier, um kostenlose Produkte zu erhalten

Bildbeschreibung hier einfügen

Wählen Sie Object Storage COS

Bildbeschreibung hier einfügen

An diesem Punkt ist der Kontoteil abgeschlossen. Als Nächstes müssen wir einen Bucket zum Speichern von Bildern erstellen. Melden Sie sich bei der Objektspeicherkonsole an und erstellen Sie einen Bucket. Legen Sie die Bucket-Berechtigungen auf öffentliches Lesen und privates Schreiben fest.

Erstellen eines Buckets

Bildbeschreibung hier einfügen

Einrichten von CORS-Regeln

Bildbeschreibung hier einfügen

AllowHeader muss auf * gesetzt werden.
An diesem Punkt ist unser Tencent Cloud-Speicher-Bucket eingerichtet.

3. Erstellen Sie eine neue Datei-Upload-Komponente

Installieren des JavaScript SDK

npm ich cos-js-sdk-v5 --speichern

Erstellen Sie eine neue Upload-Bildkomponente src/components/ImageUpload/index.vue

Für die Upload-Komponente können wir die el-upload-Komponente des Elements verwenden und den Fotowandmodus listtype="picture-card" übernehmen.

<Vorlage>
  <div>
    <el-hochladen
      Listentyp = "Bildkarte"
      :Grenze="4"
      Aktion=""
      :file-list="Dateiliste"
      :on-preview="Vorschau"
      :http-request="hochladen"
      :on-change="ändern"
      :before-upload="vor dem Hochladen"
      :akzeptieren="Typliste"
      :on-remove="handleEntfernen"
    >
      <i Klasse="el-icon-plus" />
    </el-upload>
    <el-Fortschritt
      v-if="Prozent anzeigen"
      Stil="Breite: 180px"
      :Prozentsatz="Prozent"
    />
    <el-dialog title="Bild" :visible.sync="showDialog">
      <img :src="imgUrl" style="width: 100%" alt="" />
    </el-dialog>
  </div>
</Vorlage>
<Skript>
COS aus „cos-js-sdk-v5“ importieren
const cos = neuer COS({
  SecretId: 'xxx', // geheime ID
  SecretKey: 'xxx' // geheimer Schlüssel
}) // Das instanziierte Paket kann hochgeladen werden und kann in den Speicher-Bucket im Konto hochgeladen werden export default {
  Daten() {
    zurückkehren {
      fileList: [], // Setzt die Bildadresse in ein Array showDialog: false, // Steuert die Anzeige der Popup-Ebene imgUrl: '',
      currentImageUid: null,
      Typliste: "Bild/*",
      showPercent: false, // Ob der Fortschrittsbalken angezeigt werden soll Prozent: 0 // Upload-Fortschritt}
  },
  Methoden: {
    Vorschau(Datei) {
      this.imgUrl = Datei.URL
      this.showDialog = true
    },
    vorUpload(Datei) {
      // Dateitypen, die hochgeladen werden dürfen const types = ['image/jpeg', 'image/gif', 'image/bmp', 'image/png']
      wenn (!types.includes(Datei.Typ)) {
        this.$message.error('Hochgeladene Bilder können nur im JPG-, GIF-, BMP- oder PNG-Format vorliegen!')
        return false // return false verhindert das Hochladen des Bildes}
      Konstante maximale Größe = 1024 * 1024
      if (Dateigröße > max.Größe) {
        this.$message.error('Die maximale Bildgröße darf 1 MB nicht überschreiten.')
        return false
      }
      this.currentImageUid = Datei.uid
      this.showPercent = wahr
      returniere wahr
    },
    hochladen(Parameter) {
      // konsole.log(params.file)
      wenn (params.file) {
        // Upload-Vorgang ausführen cos.putObject({
          Bucket: „xxx“, // Speicher-Bucket Region: „ap-nanjing“, // Regionsschlüssel: params.file.name, // Dateiname Body: params.file, // Hochzuladendes Dateiobjekt StorageClass: „STANDARD“, // Der Upload-Modus-Typ kann standardmäßig direkt auf den Standardmodus eingestellt werden onProgress: (progressData) => {
            dieser.Prozent = Fortschrittsdaten.Prozent * 100
          }
        }, (Fehler, Daten) => {
          // Wie verarbeite ich Daten, nachdem sie zurückgegeben wurden? if (err) return
          diese.fileList = diese.fileList.map(item => {
            wenn (item.uid === this.currentImageUid) {
              return { url: 'http://' + Daten.Standort, Name: Artikel.Name }
            }
            Rücksendeartikel
          })
          // console.log(diese.Dateiliste)
        })
      }
    },
    handleRemove(Datei, Dateiliste) {
      diese.Dateiliste = diese.Dateiliste.filter(Element => Element.uid !== Datei.uid)
      // console.log(Datei)
      cos.deleteObject({
        Bucket: 'xxx', /* Erforderlich*/
        Region: ‚ap-nanjing‘, /* Die Region, in der sich der Bucket befindet, Pflichtfeld*/
        Schlüssel: file.name /* Erforderlich*/
      }, (Fehler, Daten) => {
        // console.log(fehler || daten)
      })
    },
    ändern(Datei, Dateiliste) {
      this.fileList = Dateiliste
    }
  }
}
</Skript>

Detaildetailseite stellt Komponenten vor

<Vorlage>
  <div Klasse="App-Container">
    <el-Karte>
      <el-tabs>
        <el-tab-pane label="Persönliche Daten">
          <Benutzerinfo />
        </el-tab-pane>
        <el-tab-pane label="Passwort zurücksetzen">
          <!-- Formular einfügen -->
          <el-form
            Beschriftungsbreite = "120px"
            Stil="Rand links: 120px; Rand oben: 30px"
          >
            <el-form-item label="Passwort:">
              <el-input style="width: 300px" type="password" />
            </el-form-item>
            <el-form-item label="Passwort bestätigen:">
              <el-input style="width: 300px" type="password" />
            </el-form-item>
            <el-form-item>
              <el-button type="primary">Zurücksetzen</el-button>
            </el-form-item>
          </el-form>
        </el-tab-pane>
        <el-tab-pane label="Abteilungsinformationen">
          <Abteilung />
        </el-tab-pane>
        <el-tab-pane label="Avatar auswählen">
          <Bild-Upload />
        </el-tab-pane>
      </el-tabs>
    </el-Karte>
  </div>
</Vorlage>
<Skript>
importiere userInfo aus „./component/Userinfo“
Abteilung aus „./Komponente/Abteilung“ importieren
importiere imageUpload von '@/components/ImagUpload'

Exportstandard ({
  Komponenten:
   'Benutzerinfo': Benutzerinfo,
   'Abteilung': Abteilung,
   'Bild-Upload': Bild hochladen
  },
  // 
    Methoden: {
    hochladen(e) {
      const Datei = e.Zieldateien[0]
      const reader = neuer FileReader()
      reader.readAsDataURL(Datei)
      reader.onload = asynchrone Funktion (e) {
        warte auf Upload({
          Datei: {
            Originalname: '11.jpg',
            Datei: e.target.result
          }
        })
      }
    }
  }

})
</Skript>

Erstellen Sie eine Route für die Detailseite. Da die aktuelle „Ansicht“ ein sekundärer Navigationssprung ist, sollte die Route wie folgt geschrieben werden:

Layout aus '@/layout' importieren
Standard exportieren {
  Pfad: '/user',
  Komponente: Layout,
  Kinder: [{
    Pfad: 'Index',
    Komponente: () => import('@/views/user/index'),
    Name: "Benutzer",
    Meta: {
      Titel: 'Benutzerverwaltung',
      Symbol: „Konto“
    }
  },
  {
    Pfad: "Detail",
    Komponente: () => import('@/views/user/detail'),
    Name: "Detail",
    versteckt: wahr,
    Meta: {
      Titel: „Benutzerdetails“,
      Symbol: „Konto“
    }
  }]
}

Bildbeschreibung hier einfügen

Rendern

Klicken Sie hier, um Folgendes anzuzeigen:

Bildbeschreibung hier einfügen

Wähle einen Avatar:

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Prüfen Sie, ob es in den Cloud-Speicher hochgeladen wurde:

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über den Cloud-Speicher von vue.js zur Implementierung der Bild-Upload-Funktion. Weitere verwandte Inhalte zum Hochladen von Bildern von vue.js finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Vue + SSM realisiert den Vorschaueffekt beim Hochladen von Bildern
  • Implementierungsbeispiel für den Bildupload mit Vue+Element+Springboot
  • Vue+axios-Beispielcode zum Hochladen von Bildern und Erkennen von Gesichtern
  • Beim Hochladen von Bildern mit Axios in Vue sind Probleme aufgetreten
  • Öffentlicher Upload-Bereich für mehrere Typen von Anhangsbildern auf der Vue-Seite und anwendbares Faltfenster (Beispielcode)

<<:  So kompilieren und installieren Sie xdebug in einer Ubuntu-Umgebung

>>:  MySQL 8.0.12 Installations- und Nutzungs-Tutorial

Artikel empfehlen

Docker startet Redis und legt das Passwort fest

Redis verwendet das Apline-Image (Alps) von Redis...

Gemessenes Bild - HTTP-Anforderung

Bitte öffnen Sie die Testseite in einem gängigen ...

Vue-Beispielcode mit dem Animationseffekt „Übergangskomponente“

Die Übergangsdokumentadresse definiert eine Hinte...

Node verwendet das Modul async_hooks zur Anforderungsverfolgung

Das Modul async_hooks ist eine experimentelle API...

Tutorial zu HTML-Tabellen-Tags (13): Regeln für interne Rahmenstilattribute

Mit REGELN kann die Art der inneren Rahmen der Ta...

SQL-Implementierung von LeetCode (182. Doppelte Postfächer)

[LeetCode] 182.Doppelte E-Mails Schreiben Sie ein...

Was bedeutet href=# in einem Link?

Links zur aktuellen Seite. ------------------- Übl...

Podman bootet den Container automatisch und vergleicht ihn mit Docker

Inhaltsverzeichnis 1. Einführung in Podman 2. Vor...