gpt4 book ai didi

node.js - 从 Dropbox 流读取到缓冲区

转载 作者:行者123 更新时间:2023-12-05 07:07:58 25 4
gpt4 key购买 nike

我需要从 Dropbox 下载一个文件到我服务器上的缓冲区中。由于安全问题,我无法将文件直接下载到客户端。因此,我向我的服务器发送请求,然后从 Dropbox 获取文件,然后将其转发给客户端。我设法实现了将 Dropbox 流写入我的服务器上的文件,然后将其发送到客户端。

我需要在将 Dropbox 流写入我服务器上的文件的情况下实现此机制。我需要创建一个缓冲区并写入其中,然后将缓冲区转发给客户端。

export const downloadFileFromDropbox = async function downloadFileFromDropbox(fileName,
folderNameOnDropbox) {

let isSucceeded;
const message = [];
let downloadResult;
let fileBuffered = "";

// authentication
const dropbox = dropboxV2Api.authenticate({
token: process.env.DEV_DROPBOX_SECRET_KEY
});

// configuring parameters
const params = Object.freeze({
resource: "files/download",
parameters: {
path: `/${folderNameOnDropbox}/${fileName}`
}
});


let dropboxPromise = new Promise(function (resolve, reject) {
dropbox(params, function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
}).pipe(fs.createWriteStream(/* need to implement buffer here */));
});

await dropboxPromise.then(async function (resultObj) {
isSucceeded = true;
message.push("fileDownload_OK");
}).catch(async function (err) {
isSucceeded = false;
message.push(err.message);
});

downloadResult = {
isSucceeded,
message,
/* Buffer */
};

return downloadResult;

};

最佳答案

如果不将文件写入某个位置,就无法将文件转换为缓冲区对我有用的是:

  1. 将文件写入临时文件夹
  2. 读取并转换成缓冲区
  3. 将缓冲区发送回客户端
  4. 从临时位置删除文件

这是我的代码:

   dropbox = dropboxV2Api.authenticate({ token: credentials.access_token });
dropbox(
{
resource: 'files/download',
parameters: {
path: `${req.query.folder}` + `/${req.query.filename}`,
},
},
(err, result, response) => {
//download completed
if (err) {
return res.status(500).send(err);
} else {
console.log('download completed');
}
}
).pipe(
fs
.createWriteStream(`./app/tmp/` + `${req.query.filename}`)
.on('finish', () => {
fs.readFile(
`./app/tmp/` + `${req.query.filename}`,
function (err, buffer) {
if (err) {
res.status(500).send(err);
} else {
fs.unlink(`./app/tmp/` + `${req.query.filename}`, (err) => {
if (err) {
console.error(err);
return;
}
//file removed
res.status(200).send(buffer);
});
}
}
);
})
);

希望对你有所帮助,虽然有点晚了

关于node.js - 从 Dropbox 流读取到缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61991904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com