Heim  >  Artikel  >  Web-Frontend  >  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)

不言
不言nach vorne
2019-03-16 10:51:014487Durchsuche

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();
});

......

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen