NodeJS 下载文件js

ftf50wuq  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(100)

我已经注意到,当我下载一个更大的文件,它不下载在较小的数据包与加载栏,你只需要等待一段时间,然后它弹出在100%是有任何其他方法来解决这个问题。
它现在看起来是这样的。

const link = document.createElement("a");
link.href = myUrl;
link.setAttribute("download", data.name);
document.body.appendChild(link);
link.click();
link.remove();

字符串
我寻找如何使用流,但我不知道如果这是你使用。谢谢。

0x6upsns

0x6upsns1#

下载文件有很多简单的方法,而不是使用JavaScript向文档添加链接,单击按钮,然后删除它。浏览器不会显示任何进度,因为默认情况下它不会这样做。您必须编写一个解决方案,在下载时显示并更新进度。下面是如何使用javascript启动下载并提供反馈的示例:

function downloadURL (url, progress) {
  return new Promise((resolve, reject) => {
    fetch(url)
      .then(res => {
        const reader = res.body.getReader()
        const totalSize = Number(res.headers.get('content-length'))
        let downloadSize = 0
        
        function readData() {
           return reader.read().then( result => {
              if( result.value ) {
                 downloadSize += result.value.length;
                 const percent = Math.floor( (downloadSize / totalSize) * 100 )
                 elem.setAttribute('value', percent)
                 elem.textContent = `${percent} %`
              }

              if( !result.done ) {
                 return readData();
              }
           })
        }
        return readData()
      })
      .catch(err => reject(err))
  })
}

const progressElem = document.body.append('<progress id="file" value="0" max="100"> 0% </progress>')
downloadURL( myUrl, progressElem )
   .then((res) => console.log("Done!", res))
   .finally( () => document.body.remove( progressElem ) );

字符串
这将下载文件,并显示一个进度条(无样式),因为它下载的数据。

相关问题