第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Node.js 從 Dropbox 下載大文件?

如何使用 Node.js 從 Dropbox 下載大文件?

我想實現(xiàn)一個大文件下載(大約 10-1024 Mb)。我已經(jīng)成功從 Dropbox 獲取了一個文件:operationResult = await dbx.filesDownload({    path: `/${CONFIG_STORAGE.uploader.assetsPath}/${fileUUID}`});然后我將接收到的文件與元數(shù)據(jù)捆綁在一起,并將其返回到我的 Node.js 服務(wù)器:fileMIME = mime.lookup(operationResult.name);const downloadResult = Object.freeze({    fileBinary: operationResult.fileBinary,    fileLength: operationResult.fileBinary.length,    fileMIME,    fileName: operationResult.name,    isSucceeded,    message});return downloadResult;現(xiàn)在Buffer,我將從 Dropbox 獲得的 a 轉(zhuǎn)換為Readable流并將其通過管道傳輸回客戶端:res.setHeader("Content-Disposition", "attachment; filename=" + downloadResult.fileName);res.setHeader("Content-Type", downloadResult.fileMIME);const fileReadableStream = new Readable();fileReadableStream.push(downloadResult.fileBinary);fileReadableStream.push(null);fileReadableStream.pipe(res);到目前為止,一切都很清楚并且有效。在這里我面臨第一個陷阱:我需要以某種方式在瀏覽器中觸發(fā)下載過程。在許多示例中,使用了一些小圖像或 JSON,我們可以將其完全加載到 RAM 中,進(jìn)行操作,例如轉(zhuǎn)換為Base64,將其分配給a.href,并觸發(fā)a.click()。但由于我的文件是 10-50 Mb,我不確定這種方法是否正確。我已經(jīng)嘗試過 Fetch API:const response = await fetch(`${host}/download?fileName=${fileName}`, {    credentials: "same-origin",    method: "POST",    mode: "cors"});const a = document.createElement("a");a.href = response.text();a.download = "MyFile.pdf";a.click();但我總是失敗 - 沒有文件錯誤。我還嘗試使用 jQuery AJAX 和XMLHttpRequest( XHR),但仍然沒有下載文件。也許,我缺少一些東西。如何從服務(wù)器獲取 10-1024 Mb 的文件?PS 沒想到像下載文件這樣的小事,竟然這么復(fù)雜。
查看完整描述

1 回答

?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗 獲得超5個贊

我通過從filesDownloadto切換解決了這個問題filesGetTemporaryLink,它返回一個文件鏈接而不是文件本身。然后我觸發(fā)下載此鏈接。


最終結(jié)果:


operationResult = await dbx.filesGetTemporaryLink({

    path: `/${CONFIG_STORAGE.uploader.assetsPath}/${fileUUID}`

});


const downloadResult = Object.freeze({

    fileLength: operationResult?.metadata.size,

    fileLink: operationResult?.link,

    fileMIME: mime.lookup(operationResult?.metadata.name),

    fileName: operationResult?.metadata.name,

    isSucceeded,

    message

});


return downloadResult;

然后我將輸出發(fā)送給客戶端:


res.json(downloadResult);

在客戶端,我通過await/ asyncFetch API 調(diào)用獲得它:


const fileResponse = await fetch(``${host}/downloadDocument`, {

    body: JSON.stringify({fileUUID: fileName}),

    cache: "no-cache",

    credentials: "same-origin",

    headers: {

        "Content-Type": "application/json"

    },

    method: "POST",

    mode: "cors"

});


const fileData = await fileResponse.json();


const aTag = document.createElement("a");


aTag.href = fileData.fileLink;

aTag.download = fileData.fileName;

aTag.click();

因此,服務(wù)器根本不需要處理文件,沒有額外的 CPU、RAM 或流量影響,無論我嘗試下載多大的文件。


查看完整回答
反對 回復(fù) 2022-11-03
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號