Estoy jugando con Electron-Node.js e intento descargar un archivo de un servidor y guardarlo en el disco local.
El siguiente código funciona como se esperaba, aunque no estoy seguro de si este es el mejor método para hacerlo.
<script> const { ipcRenderer } = require('electron'); var fs = require('fs'); // (2) convert the blob to file. async function saveBlobToFile(blob, filename) { let fileData = new Int8Array(await blob.arrayBuffer()); fs.writeFileSync(filename, fileData); console.log("Blob successfully saved to file."); //is the file healthy though? } // (1) (download the file) function download(downloadURL, downloadDirectory){ var filename = "test.zip"; //this could be exe, images, pdf if (!fs.existsSync(downloadDirectory)){ fs.mkdirSync(downloadDirectory, { recursive: true }); console.log("Download Directory doesn't exist, created."); } console.log("Downloading..."); fetch(downloadURL) .then(response => response.blob()) .then(blob => { console.log("Downloaded and is now saving..."); saveBlobToFile(blob, downloadDirectory+"\\"+filename); }).catch(console.error); } download("https://sample.com/test.zip", "SOME_DIRECTORY_HERE"); //let's try to download the file. </script>Aquí viene el WhatIF ;
Lo pruebo con un tamaño de archivo de 50MB y funciona, el archivo es saludable. Pero, ¿qué sucede si el tamaño del archivo es superior a 200MB o, por ejemplo, un large file y el usuario solo tiene una conexión a Internet muy limitada? El archivo podría corromperse, ¿cómo evitar esto? ¿Cómo podemos comprobar o asegurarnos de que el archivo se haya descargado correctamente y no esté dañado?
Estoy pensando, tal vez pueda verificar la suma de verificación MD5 del archivo descargado y compararlo con el archivo del servidor. ¿Pero es esto suficiente?
Si la suma de verificación MD5 es diferente del servidor, vuelva a descargar el archivo y vuelva a verificarlo, pero nuevamente esto será una pérdida de datos para un usuario con una conexión a Internet muy limitada.
Como dijo Marc , no hay una razón común por la que su archivo se corrompa
Pero
Estoy pensando, tal vez pueda verificar la suma de verificación MD5 del archivo descargado y compararlo con el archivo del servidor. ¿Pero es esto suficiente?
es para mí la respuesta de escritura a su propia pregunta.
Después
Si la suma de verificación MD5 es diferente a la del servidor, vuelva a descargar el archivo y vuelva a verificarlo, pero nuevamente esto será una pérdida de datos para un usuario con una conexión a Internet muy limitada.
Bueno, puedes dividir tu archivo en partes.
Si tiene archivos grandes para transferir (> 1 Gb, por ejemplo), puede dividirlos en fragmentos de 100 Mb y transferirlos uno por uno, y verificar las sumas de verificación individualmente, luego concatenarlas y verificar la suma de verificación completa nuevamente.
p.ej:
Buffer.from(fileParts) y validar la suma de verificación finalEs solo un pensamiento rápido sobre una posible solución a su problema.
Espero que te ayude.