Vue + Element + OSS realisiert das Hochladen von Front-End-Fragmenten und die Wiederaufnahme von Haltepunkten

Vue + Element + OSS realisiert das Hochladen von Front-End-Fragmenten und die Wiederaufnahme von Haltepunkten

Reine Front-End-Implementierung:切片上傳斷點續傳.斷點續傳muss auf der Grundlage des Schneidens und Hochladens implementiert werden

Das Front-End hat zuvor OSS hochgeladen, ohne dass das Back-End eine Schnittstelle bereitstellen musste. Posten Sie zunächst den vollständigen Code, kopieren Sie ihn direkt und ändern Sie die Parameter im neuen OSS entsprechend den relevanten Informationen des OSS Ihres Unternehmens. Wenn Sie auf Probleme stoßen, lesen Sie bitte weiter unten.

oss官方文檔

https://help.aliyun.com/document_detail/111268.html?spm=a2c4g.11186623.6.1111.5a583a07LknRUO

Der Code ermöglicht die erforderliche Umgebung: vue + element + ali-oss

Installieren Sie ali-oss: cnpm install ali-oss

Code-Implementierung

<Vorlage>
 <div Klasse="Dashboard-Editor-Container">
 <el-hochladen
  Klasse="Upload-Demo"
  Aktion=""
  ref="hochladen"
  :file-list="Dateiliste"
  :Grenze="2"
  :on-change="Handleänderung"
  :on-remove="handleEntfernen"
  :auto-upload="false"
  akzeptieren=""
 >
  <el-button slot="trigger" size="small" type="primary">Datei auswählen</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" @click="submitForm">Auf Server hochladen</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" @click="resumeUpload">Weiter</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" @click="stopUplosd">Pause</el-button>
  <el-button style="margin-left: 10px;" size="small" type="success" @click="abortMultipartUpload">Slice löschen</el-button>
 </el-upload>
 <el-progress :percentage="Prozentsatz" :status="uploadStatus"></el-progress>
 </div>
</Vorlage>

<Skript>
 let OSS = require('ali-oss') // Ali-OSS-Plugin importieren const client = new OSS({
 Region: „oss-cn-shanghai“, //Geben Sie den Wert basierend auf Ihrem Bucket-Standort ein. AccessKeyId: „LTA*********RaXY“, //AccessKeyId Ihres Kontos
 accessKeySecret: 'uu1************GiS', //accessKeySecret Ihres eigenen Kontos
 Bucket: 'a******o', //Bucket-Name});
Standard exportieren {
 Daten () {
 zurückkehren {
  Dateiliste:[],
  Datei: null,
  tempCheckpoint: null, // wird verwendet, um den aktuellen Slice-Inhalt zwischenzuspeichern uploadId: '',
  uploadStatus: null, // Fortschrittsbalken Upload-Status in Prozent: 0, // Fortschrittsbalken in Prozent uploadName: '', // Vollständiger Pfad des Buckets, in dem sich das Objekt befindet}
 },
 montiert() {
 // window.addEventListener('online', this.resumeUpload);
 },
 Methoden: {
 // Klicken, um auf den Server hochzuladen submitForm(file) {
  dies.multipartUpload();
 },
 // Das mehrteilige Upload-Ereignis abbrechen async abortMultipartUpload() {
  window.removeEventListener('online', this.resumeUpload)
  const name = this.uploadName; // Der vollständige Pfad des Buckets, in dem sich das Objekt befindet.
  const uploadId = this.upload; // UploadId in mehreren Teilen hochladen.
  const Ergebnis = warte auf Client.abortMultipartUpload(Name, UploadId);
  console.log(Ergebnis, '=======Slice löschen====');
 },
 // Mehrteiligen Upload anhalten.
 stopUplosd () {
  window.removeEventListener('online', this.resumeUpload) // Ereignis-Listener bei Pause löschen let result = client.cancel();
  console.log(Ergebnis, '----------- Hochladen anhalten -----------')
 },
 // Slice-Upload async multipartUpload () {
  wenn (!diese.datei) {
  this.$message.error('Bitte wählen Sie eine Datei aus')
  zurückkehren
  }
  this.uploadStatus = null
  // console.log("dieser.uploadStatus",diese.Datei, dieser.uploadStatus);

  dieser.Prozentsatz = 0
  versuchen {
  //Objektname kann als Dateiname (z. B. file.txt) oder Verzeichnis (z. B. abc/test/file.txt) angepasst werden, um die Datei in den aktuellen Bucket oder ein angegebenes Verzeichnis unter dem Bucket hochzuladen.
  let result = warte auf Client.multipartUpload(dieser.Dateiname, diese.Datei, {
   Überschriften: {
   'Inhaltsdisposition': 'inline',
   'Content-Type': this.file.type //Hinweis: Wird entsprechend dem Suffix des Bildes oder der Datei festgelegt. Ich habe in meinem Experiment '.png'-Bilder verwendet. Die spezifischen Gründe werden unten erläutert},
   Fortschritt: (p, Prüfpunkt) => {
   this.tempCheckpoint = Prüfpunkt;
   dieser.upload = Prüfpunkt.uploadId
   dieser.UploadName = Prüfpunkt.Name
   dieser.Prozentsatz = p * 100
   // console.log(p, Prüfpunkt, dieser.Prozentsatz, '---------UploadId-----------')
   // Haltepunkt-Aufzeichnungspunkt. Nach einem Neustart des Browsers ist es nicht möglich, direkt mit dem Hochladen fortzufahren. Sie müssen den Upload-Vorgang manuell anstoßen.
   },
   Meta: {Jahr: 2020, Personen: 'dev'},
   MIME: dieser.Dateityp
  });
  console.log(Ergebnis, dieser.Prozentsatz, 'Ergebnis=Slice-Upload abgeschlossen=');
  } fangen (e) {
  window.addEventListener('online', this.resumeUpload) // Dieser Listener wird in die Ausnahmebehandlung getrennter Netzwerke eingefügt. // Timeout-Ausnahme erfassen.
  if (e.code === 'ConnectionTimeoutError') { // Ausnahmebehandlung bei Anforderungstimeout this.uploadStatus = 'Ausnahme'
   console.log("Zeitüberschreitungsfehler");
   // führe den Vorgang „ConnectionTimeoutError“ aus
  }
  // console.log(e)
  }
 },
 // Hochladen fortsetzen.
 asynchroner Lebenslauf-Upload () {
  window.removeEventListener('online', this.resumeUpload)
  wenn (!this.tempCheckpoint) {
  this.$message.error('Bitte zuerst hochladen')
  zurückkehren
  }
  this.uploadStatus = null
  versuchen {
  let result = warte auf Client.multipartUpload(dieser.Dateiname, diese.Datei, {
   Überschriften: {
   'Inhaltsdisposition': 'inline',
   'Content-Type': this.file.type //Hinweis: Wird entsprechend dem Suffix des Bildes oder der Datei festgelegt. Ich habe in meinem Experiment '.png'-Bilder verwendet. Die spezifischen Gründe werden unten erläutert},

   Fortschritt: (p, Prüfpunkt) => {
   dieser.Prozentsatz = p * 100
   console.log(p, checkpoint, 'checkpoint----Hochgeladene Slice-Informationen wiederherstellen-------')
   this.tempCheckpoint = Prüfpunkt;
   },
   Prüfpunkt: dieser.tempCheckpoint,
   Meta: {Jahr: 2020, Personen: 'dev'},
   MIME: dieser.Dateityp
  })
  console.log(Ergebnis, 'Ergebnis-=-=-Upload fortsetzen abgeschlossen')
  } fangen (e) {
  Konsole.log(e, 'e-=-=-');
  }
 },

 // Zu ändernde Datei auswählen handleChange(file, fileList) {
  diese.Dateiliste = Dateiliste.Filter(Zeile => Zeile.uid == Datei.uid)
  diese.Datei = Datei.raw
  //Hochladen, wenn sich die Datei ändert // this.submitForm(file)
 },
 handleRemove(Datei, Dateiliste) {
  this.percentage = 0 // Setzt den Fortschrittsbalken auf Null this.fileList = []
 },
 }
}
</Skript>

<Stilbereich>
</Stil>

Wenn die entsprechenden Abhängigkeiten installiert wurden, aber beim Ausführen des obigen Codes immer noch ein Fehler auftritt, überprüfen Sie bitte die folgenden Probleme

 const client = neues OSS({
 Region: „oss-cn-shanghai“, //Geben Sie den Wert basierend auf Ihrem Bucket-Standort ein. AccessKeyId: „LT******XY“, //AccessKeyId Ihres Kontos
 accessKeySecret: 'uu*********GiS', //accessKeySecret Ihres eigenen Kontos
 Bucket: 'a******io', //Bucket-Name});

Das Platzieren der oben genannten Informationen auf dem Frontend kann zu Sicherheitsproblemen führen. Wenn sie in einem Projekt verwendet werden, sollten sie so weit wie möglich über die Backend-Schnittstelle bereitgestellt werden. Oder verwenden Sie die temporäre STS-Autorisierung. Nicht in der Demo, bitte erkunden Sie es selbst.
https://www.alibabacloud.com/help/zh/doc-detail/100624.htm?spm=a2c63.p38356.879954.5.7a234d04IQpf5I#concept-xzh-nzk-2gb

Sie können das Backend oder den Betrieb und die Wartung nach den Informationen in den Konfigurationselementen fragen. Der Bucket-Name muss auf Ihrem OSS vorhanden sein und Sie müssen die Berechtigung haben, darauf zuzugreifen. Andernfalls wird immer Pleasr create a busket first oder „Domänenübergreifend“ gemeldet.

Wenn Sie bei etag auf domänenübergreifende Nachrichten oder Fehlermeldungen stoßen, überprüfen Sie die OSS-Konfiguration und suchen Sie jemanden mit OSS-Serverberechtigungen, um sie zu konfigurieren:

window.addEventListener('online', this.resumeUpload) wird verwendet, um den Netzwerkstatus (getrennt und verbunden) zu überwachen. Um einen automatischen Upload nach der Wiederaufnahme des Netzwerks nach der Trennung zu erreichen, müssen Sie den Listener festlegen.

window.removeEventListener('online', this.resumeUpload) bricht den Listener ab. Wenn Sie die Abbruchüberwachung nicht einstellen, wird der Upload bei bestehender Internetverbindung fortgesetzt, da die Überwachungsbedingungen immer erfüllt sind.

Überschriften: {
   'Inhaltsdisposition': 'inline',
   'Content-Type': this.file.type //Hinweis: entsprechend dem Suffix des Bildes oder der Datei festlegen. Ich erhalte den Typ der Datei. Der genaue Grund wird unten erläutert},

‚Content-Type‘: Funktion „this.file.type“: Nachdem die Datei hochgeladen wurde, können Sie sie direkt beim Aufrufen des Dateilinks anzeigen, andernfalls wird sie direkt heruntergeladen.

Nachdem die Datei hochgeladen wurde, können Sie sie in resule.res.requestUrls überprüfen. Achten Sie jedoch darauf, nach der Adresse auf ?uploadId=****** zu klicken.

Der obige Code ist nur eine Demo. Der Code dient hauptsächlich zur Implementierung von Funktionen und ist nicht streng. Bitte verbessern Sie ihn selbst.

Dies ist das Ende dieses Artikels über vue+element+oss zur Implementierung von segmentiertem Front-End-Upload und Breakpoint-Resume. Weitere verwandte Inhalte zu segmentiertem Upload und Breakpoint-Resume von vue 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 Element UI + OSS zur Realisierung der Funktion zum Hochladen von Dateien
  • Beispiel zum Hochladen von Bildern in den Alibaba Cloud OSS-Speicher mit Vue.js
  • Beispiel zum Hochladen von Bildern in OSS in Vue (Bilder haben eine Löschfunktion)
  • Beispiel für die Verwendung der Ali OSS-Uploadfunktion auf der Vue-Seite (Teil 2)
  • Beispiel für die Verwendung der Ali OSS-Uploadfunktion auf der Vue-Seite (I)
  • Vue verwendet OSS zum Hochladen von Bildern oder Anhängen

<<:  mysql 5.7.5 m15 winx64.zip Installations-Tutorial

>>:  Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx

Artikel empfehlen

Detaillierte Erklärung zur Verwendung von Titel-Tags und Absatz-Tags in XHTML

XHTML-Überschriftenübersicht Wenn wir Word-Dokume...

Einige Erfahrung im Aufbau des React Native-Projektframeworks

React Native ist ein plattformübergreifendes Fram...

Docker erstellt Cluster-MongoDB-Implementierungsschritte

Vorwort Aufgrund der Geschäftsanforderungen des U...

Über das Problem beim Schreiben von Plugins zum Mounten von DOM in vue3

Im Vergleich zu vue2 verfügt vue3 über ein zusätz...

CSS realisiert die Layoutmethode „Fest links“ und „Adaptiv rechts“

1. Schwebendes Layout 1. Lassen Sie zuerst das Di...

HTML realisiert Hotel-Screening-Funktion über Formular

<!doctype html> <html xmlns="http:/...

So installieren Sie PostgreSQL11 auf CentOS7

Installieren Sie PostgreSQL 11 auf CentOS 7 Postg...