我在本地机器上使用puppeteer运行NodeJS脚本,以便从互联网上下载一些资源。我想让这个脚本作为Google Cloud function运行。
我只想知道,是否有任何与GFC相关的本地空间,我们可以在其中保存此文件并可在以后访问,或者我们是否可以指定任何云存储存储桶URL,以保存此下载。
#!/usr/bin/env node
const { program } = require('commander');
const puppeteer = require('puppeteer');
program
.option('-e, --email <email>', 'Login Email Address', process.env.LOOKER_EMAIL || '')
.option('-p, --password <password>', 'Login Password', process.env.LOOKER_PASSWORD || '')
.option('-d, --dashboard <id>', 'Dashboard To Download');
program.parse(process.argv);
const fs = require('fs');
const basePath = 'C:\\card\\'
(async () => {
const loginEmail = program.email;
const loginPassword = program.password;
const dashboardId = program.dashboard;
// used puppeteer to download some files
const browser = await puppeteer.launch({
headless: true
})
let pages = await browser.pages();
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
await page.goto(loginUrl);
await page.waitForSelector(loginEmailSelector);
await page.type(loginEmailSelector, loginEmail);
await page.type(loginPasswordSelector, loginPassword);
await Promise.all([
page.waitForNavigation(),
page.click(loginButtonSelector)
]);
await page.goto(`https://somewebsite/${dashboardId}`);
await page.waitForSelector(menuSelector, {
visible: true
});
await page.click(menuSelector);
await page.waitForSelector(downloadSelector, {
visible: true
});
const ts = Date.now()
const downloadLoc = basePath + ts + '\\'
console.log('downloadLoc ', downloadLoc)
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: downloadLoc
})
console.log(`your file's on the way!`)
})();所以在这里的脚本,我只是下载的文件在C驱动器,我希望这存储在一些云存储,如果可能的话,请让我知道如果你有任何建议。
发布于 2020-11-20 19:46:49
云函数的概念假设代码应该是无状态的,这意味着任何数据都应该存储在外部,虽然有可能使用/tmp目录,但这只是暂时的目的。推荐使用云硬盘(reference)。
然而,不仅仅是云存储可以用来保持状态。对于二进制对象,即文件,这将是最好的。
另一方面,如果这些文件包含数据,您可以尝试选择谷歌NoSQL数据库之一,如Firestore、Datastore (实际上是数据存储模式下的Firestore )和Firebase Realtime database。所有这些应用程序接口都适用于多种语言,当然也包括node.js。此外,如果您计划创建更大的解决方案,甚至可以使用BigTable处理海量数据,如果您需要分析,甚至可以使用BigQuery。所有这些都取决于你需要什么。
在上面提到的Google API中,非常好和非常方便的是,在云函数中,不需要对特定的产品进行身份验证,从而节省了大量的代码和资源。所有解决方案都是无服务器的,因此您不必关心底层服务器以及解决方案增长时的可扩展性。此外,当您在GCP中执行此操作时,您可以在资源之间获得极快的网络速度。
https://stackoverflow.com/questions/64925368
复制相似问题