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

Detaillierter Informationsaustausch über das MySQL-Protokollsystem

Jeder, der schon einmal an einem großen System ge...

Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt

Ergebnisse erzielen Implementierungscode html <...

...

Unabhängige Implementierung der Nginx-Containerkonfigurationsdatei

Erstellen eines Containers [root@server1 ~]# dock...

Über Zabbix Admin-Login vergessen Passwort zurücksetzen

Das Problem beim Zurücksetzen des Passworts für d...

So richten Sie den Start einer JAR-Anwendung unter CentOS7 ein

Fallstricke bei der Projektimplementierung Beim B...

So installieren Sie MySQL 5.7.29 mit einem Klick mithilfe eines Shell-Skripts

Dieser Artikel bezieht sich auf die Arbeit des 51...

So legen Sie eine statische IP für den Ubuntu 18.04-Server fest

1. Hintergrund Netplan ist ein neues Befehlszeile...

Umfassendes Verständnis der HTML-Grundstruktur

Einführung in HTML HyperText-Auszeichnungssprache...

Vue verwendet die Methode in der Referenzbibliothek mit Quellcode

Der offizielle Quellcode von monaco-editor-vue la...