Heim > Web-Frontend > js-Tutorial > Einführung in die Methode zum Batch-Download von Dateien auf den lokalen Knoten (mit Code)

Einführung in die Methode zum Batch-Download von Dateien auf den lokalen Knoten (mit Code)

不言
Freigeben: 2019-03-16 10:51:01
nach vorne
4526 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Methode zum Batch-Download von Dateien auf den lokalen Server (mit Code). Ich hoffe, dass er Ihnen als Referenz dienen wird.

Mehrere Dateien separat verarbeiten

Wenn die Anzahl der Dateien kontrollierbar ist und keine Anforderungen für das heruntergeladene Dateiformat bestehen, können Sie die einfachste Methode zum direkten Durchlaufen verwenden Dateien und geben Sie sie separat weiter. Jeder Download-Link erstellt einen einzelnen Datei-Download oder einen Iframe-Download-Link.

Zip-Paket-Batch-Download

Obwohl es möglich ist, alle Dateien zu durchlaufen und dann einzelne Dateien stapelweise herunterzuladen, ist diese Erfahrung am häufigsten nicht sehr gut Der Ansatz besteht darin, Batch-Dateien herunterzuladen und in ZIP zu verpacken.

Die erste Implementierungsidee lautet also: Durchlaufen Sie im Proxy-Dienst zunächst alle Dateien, um Dateidaten anzufordern, komprimieren Sie sie dann in ein ZIP-Paket und geben Sie das ZIP-Paket dann an den Client zurück.

Dies ist in Ordnung, wenn das Download-Volumen relativ klein ist, aber wenn die Batch-Dateien sehr groß und groß sind, muss der Benutzer warten, bis der Hintergrund alle Daten anfordert und sie vor dem Download in ein komprimiertes Paket packt Das Frontend kann Feedback geben. Dies kann lange dauern und die Benutzererfahrung kann schlecht sein.

Während der vorläufigen Recherche von Kollegen wurde gesagt, dass es eine Streaming-Komprimierung und Download-Funktion geben kann. Die allgemeine Idee besteht darin, das Paket zu zerlegen und Streaming-Komprimierung hinzuzufügen.

......

let fileCounter = 0;
const zippedFilename = encodeURIComponent(downloadData.name);
const list = downloadData.list || [];
const header = {
  'Content-Type': 'application/x-zip',
  'Pragma': 'public',
  'Expires': '0',
  'Cache-Control': 'private, must-revalidate, post-check=0, pre-check=0',
  'Content-disposition': 'attachment; filename="' + zippedFilename + '"',
  'Transfer-Encoding': 'chunked',
  'Content-Transfer-Encoding': 'binary'
};
res.writeHead(200, header);
archive.store = true;
archive.pipe(res);
list.map(item => {
  fileCounter++;
  let inStream = request.get(item.downLoadUrl);
  let name = item.fileName;
  let length = 0;
  inStream.on('response', function(awsData) {
    archive.append(inStream, {
      name: name
    });
  }).on('data', function(data) {
    length += data.length;
  }).on('error', function(e) {
    console.error(name + '-error', e);
  }).on('end', function(endData) {
    fileCounter--;
    if (fileCounter < 1) {
      archive.finalize();
    }
  });
});
archive.on('error', function(err) {
  throw err;
});
archive.on('finish', function(err) {
  return res.end();
});

......
Nach dem Login kopieren

Natürlich müssen noch einige Details geklärt werden: etwa das Problem chinesischer Dateinamen, ob die Gesamtgröße der heruntergeladenen Dateien begrenzt werden muss, ob die Datei nicht existiert, usw.

Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Batch-Download von Dateien auf den lokalen Knoten (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage