Reine Front-End-Implementierung: 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. 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. 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 Wenn Sie bei Ü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 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:
|
<<: mysql 5.7.5 m15 winx64.zip Installations-Tutorial
>>: Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx
XHTML-Überschriftenübersicht Wenn wir Word-Dokume...
React Native ist ein plattformübergreifendes Fram...
1. MS SQL SERVER 2005 --1. Löschen Sie das Protok...
Vorwort Lassen Sie es mich hier zunächst erklären...
Vorwort Aufgrund der Geschäftsanforderungen des U...
Simulationstabellen und Datenskripte Kopieren Sie...
Im Vergleich zu vue2 verfügt vue3 über ein zusätz...
1. Schwebendes Layout 1. Lassen Sie zuerst das Di...
In diesem Artikel finden Sie das Installations- u...
<!doctype html> <html xmlns="http:/...
Installieren Sie PostgreSQL 11 auf CentOS 7 Postg...
1. Download-Adresse: http://dev.mysql.com/downloa...
In diesem Artikel verwenden wir die Libudev-Bibli...
Inhaltsverzeichnis Ändern der Repository-Quelle S...
Durch Ausnutzen einer neu entdeckten Sudo-Sicherh...