Javascript 如何从@google cloud/storage读取文件?
我正在从我的桶中检索一个文件 我得到了这个文件,并想阅读它的内容,但我不想下载到我的本地项目 我只想读取内容,获取数据并用它进行其他操作 我的代码:Javascript 如何从@google cloud/storage读取文件?,javascript,node.js,google-cloud-storage,Javascript,Node.js,Google Cloud Storage,我正在从我的桶中检索一个文件 我得到了这个文件,并想阅读它的内容,但我不想下载到我的本地项目 我只想读取内容,获取数据并用它进行其他操作 我的代码: export const fileManager = async () => { try { const source = 'upload/'; const options = { prefix: source, delimiter: '/' }; const remoteFile = st.bucket(bN
export const fileManager = async () => {
try {
const source = 'upload/';
const options = { prefix: source, delimiter: '/' };
const remoteFile = st.bucket(bName).file('myData.csv');
const readFileData;
remoteFile
.createReadStream()
.on('error', err => {
console.log('error');
})
.on('response', response => {
readFileData = response;
console.log('success');
// Server connected and responded with the specified status and headers.
})
.on('end', () => {
console.log('end');
// The file is fully downloaded.
});
console.log("data", readFileData)
} catch (error) {
console.log('Error Is', error);
}
};
readFileData未定义
这可能吗?我找到的每个示例都会帮助我下载文件。createReadStream是异步的,会立即返回。您必须使用回调来确定下载到内存的过程何时完成。现在,您的代码总是打印未定义的数据,因为它试图在响应可用之前打印响应
createReadStream无疑是正确的方法,但您必须理解才能正确处理结果。在链接的文档中有一整节,这就是您在这里要做的。处理流的方式并不是云存储特有的——所有节点流都是一样的
以下关于读取节点流的问题的答案可能会对您有所帮助:
你的拼图纯粹是逻辑输入错误。。。在您的代码中,您已经将readFileData定义为const,然后稍后尝试分配给它。这应该失败。将变量更改为非常量,然后重试。回答得很好!只是为了重新连接到您所说的异步。我也尝试过使用wait来等待过程完成,但我从来没有进入过success、error或end,我尝试过下载方法,然后我得到了数据,但这不是我想要的方式。它是异步的,但它不会返回承诺,所以你不能等待它,你也不能然后或抓住它。需要使用回调来确定进度、完成情况和错误情况。我在阅读您链接的文章时,没有找到您链接的答案,因此我对上一次评论进行了深入研究。我添加了一个新的回调函数来监听数据,在那里我得到了缓冲区。我的readFileData仍然未定义,当记录它时,我可以清楚地看到它未定义,因为console.logreadFileData发生在上述过程完成之前。我怀疑答案就在这些联系的某个地方。非常感谢您,如果您有时间,请给我最后一个问题指点一下。