Wie lädt Vue Dateien mit unterschiedlichem Ursprung basierend auf der URL herunter?

Wie lädt Vue Dateien mit unterschiedlichem Ursprung basierend auf der URL herunter?

Im Allgemeinen können wir beim Herunterladen von Dateien auf Basis einer URL zwischen den folgenden beiden Lösungen wählen:

1. fenster.öffnen(url)
2. <a :href="url" rel="external nofollow" download="Dateiname"/>

Während des Entwicklungsprozesses treten jedoch manchmal Situationen auf, in denen die vom Backend zurückgegebene Dateiadresse nicht aus derselben Quelle wie unsere Website stammt. Wenn Sie die beiden oben genannten Lösungen zum Herunterladen von Bildern, PDFs und anderen Dateien verwenden, öffnet der Browser sie direkt, anstatt sie herunterzuladen. Dieses Problem kann mit der folgenden Methode gelöst werden:
Dateifunktionskapselung herunterladen: (views/util/index.js)

importiere Axios von „Axios“;
// Laden Sie die Datei herunter (kann das domänenübergreifende Downloadproblem lösen)
Exportieren Sie die asynchrone Funktion „DownloadFile (Datei-URL, Dateiname)“ {
  wenn (!fileUrl) zurückgeben;
  lass res = warte auf axios({
    Methode: "get",
    URL: Datei-URL,
    Antworttyp: „Blob“
  });
  neue URL = window.URL.createObjectURL(res.data);
  sei a = document.createElement("a");
  a.href = neueUrl;
  a.download = Dateiname;
  ein.Klick();
  a.entfernen();
  //Nachdem der Ressourcendownload abgeschlossen ist, können Sie die von createObjectURL belegten Cache-Ressourcen manuell löschen. window.URL.revokeObjectURL(newUrl);
}

verwenden

<Vorlage>
  <div>
      {{Dateiname}}
      <span
        Klasse="Datei-Download"
        @click="downloadFile(datei.url, datei.name)"
        >Herunterladen
      >
  </div>
</Vorlage>

<Skript>
importiere { Download-Datei } von "@/util/index.js";
Standard exportieren {
  Komponenten: {},
  Daten() {
    zurückkehren {
      Datei:{
          URL: „https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb.zol-img.com.cn%2Fdesk%2Fbizhi%2Fimage%2F6%2F960x600%2F1426818724752.jpg&refer=http%3A%2F%2Fb.zol-img.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1627377638&t=662034e86ff9110854ca0316485e294b“,
          Name: „Schöne Landschaft“
      }
    };
  },
  erstellt() {},
  montiert() {},
  Methoden: {
    Datei herunterladen
  }
};
</Skript>

<style lang="scss" scoped>

</Stil>

PS: Die beste Lösung zum Herunterladen von Dateien durch Klicken auf die URL in Vue

Diese Art von Funktion wird häufig bei der Entwicklung angetroffen. Benutzer laden Dateien oder Anhänge auf den Server hoch und das Backend legt die Dateien auf FTP oder an anderen Orten ab. Auf der Frontend-Seite gibt es einen Download-Eintrag. Manchmal gibt das Backend einen Blob zurück, was natürlich am besten ist. Der Einfachheit halber kann das Backend jedoch auch die URL des Dateispeicherorts zurückgeben. Zu diesem Zeitpunkt kann das Frontend auf einige Probleme stoßen. Beispielsweise kann der Browser beim Herunterladen von Dateien blinken. Beim Herunterladen von Bildern, JSON-Dateien und anderen vom Browser unterstützten Dateien werden diese nicht heruntergeladen, sondern direkt im Browser geöffnet. Die folgende Methode kann solche Probleme perfekt lösen.

Lösung:

  • Einkapseln benutzerdefinierter Anweisungen
  • Wandeln Sie die URL in Fettschrift um und erstellen Sie ein Tag zum Herunterladen des Blobs

Code-Implementierung

  • Erstellen Sie ein neues Verzeichnis download-load-url im Direktive-Ordner unter src
  • Datei download-url/index.js
/*
 * Das Backend gibt die URL der Datei zurück und das Frontend erstellt ein Tag zum Herunterladen*
 * 1. Das Problem wurde behoben, dass, wenn es sich bei der Datei um ein Bild oder ein vom Browser unterstütztes Format handelt, die Datei direkt beim Klicken auf „Herunterladen“ geöffnet wird.
 * 2. Beim Herunterladen von Dateien kann es zu einem Flackern des Browsers kommen*
 * Auf der Seite verwenden * 1. Importieren Sie die Direktive import downLoad von '@/directive/down-load-url'
 * 2. Anweisungen registrieren: {downLoad}
 * 3. Verwenden Sie es als Befehl auf der Download-Schaltfläche, zum Beispiel: <el-button v-downLoad="url">Download</el-button>
 */

importiere downLoad von './downLoad'

const installieren = Funktion(Vue) {
  Vue.direktive('downLoadUrl', herunterladen)
}

downLoad.install = installieren

Exportieren Standard-Download
download-load-url/downLoad.js Datei exportieren Standard {
  binden(el, Bindung) {
    el.addEventListener('klicken', () => {
      konsole.log(Bindung.Wert) // URL
      const a = document.createElement('a')
      // let url = baseUrl + binding.value // Wenn die URL unvollständig ist, müssen Sie baseURL verketten
      const url = binding.value // Es wird direkt die komplette URL verwendet // Hier wird die URL in eine Blob-Adresse umgewandelt,
      fetch(url).then(res => res.blob()).then(blob => { // Konvertiere den Inhalt der Link-Adresszeichenfolge in eine Blob-Adresse a.href = URL.createObjectURL(blob)
        konsole.log(a.href)
        a.download = '' // Name der heruntergeladenen Datei// a.download = url.split('/')[url.split('/').length -1] // // Name der heruntergeladenen Dateidocument.body.appendChild(a)
        ein.Klick()
      })
    })
  }
}

Dies ist das Ende dieses Artikels darüber, wie Vue Dateien mit unterschiedlichem Ursprung gemäß der URL herunterladen kann. Weitere relevante Inhalte zu Vue-URL-Downloaddateien 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.js lädt Bilder entsprechend der Bild-URL herunter
  • Teilen Sie die beste Lösung zum Klicken auf eine URL, um Dateien in Vue herunterzuladen

<<:  Tutorial zur Installation von RabbitMQ mit Yum auf CentOS8

>>:  Detaillierte Erklärung, wie MySQL (InnoDB) mit Deadlocks umgeht

Artikel empfehlen

So gehen Sie mit vergessenen Passwörtern in Windows Server 2008 R2 um

Was tun, wenn Sie Windows Server 2008R2 vergessen...

Detaillierte Erläuterung der Verwendung von Docker Commit

Manchmal müssen Sie bestimmte Abhängigkeiten im B...

Implementierung der CSS-Variableneinfügung im Vue3-Stil

Inhaltsverzeichnis Zusammenfassung Einfaches Beis...

Beispielcode zur Implementierung einer schwebenden Seitenbox basierend auf JS

Wenn die Bildlaufleiste nach unten gezogen wird, ...

MySQL-Serie 9 MySQL-Abfrage-Cache und -Index

Inhaltsverzeichnis Tutorial-Reihe 1. MySQL-Archit...

jQuery implementiert einen einfachen Kommentarbereich

In diesem Artikel wird der spezifische Code von j...

Beispielcode zur Implementierung der WeChat-Kontoaufteilung mit Nodejs

Das Geschäftsszenario des Unternehmens erfordert ...

So optimieren Sie die MySQL-Abfragegeschwindigkeit

In den vorherigen Kapiteln haben wir die Auswahl ...

Ein einfaches Beispiel für eine gemeinsame MySQL-Tabellenabfrage

MySql verwendet verknüpfte Tabellenabfragen, die ...

Ein Problem mit der Bereitstellung von MySQL 5.5

MySQL-Bereitstellung Derzeit stellt das Unternehm...

Erklären, wie die SQL-Effizienz analysiert wird

Der Befehl „Explain“ ist der erste empfohlene Bef...