gpt4 book ai didi

javascript - 是否可以使用 Node js 从一个谷歌存储桶压缩到另一个

转载 作者:行者123 更新时间:2023-11-30 19:46:04 24 4
gpt4 key购买 nike

最近我接到一个要求,从一个 gcp 存储桶中选择一组文件,将其压缩并放入另一个存储桶。这是为了使 zip 文件可供我系统的用户使用。我知道我们可以从存储桶中下载必要的文件,然后压缩并重新上传到下一个存储桶。但是,如果超时请求数量增加,那会使我的服务器不堪重负。那么有没有办法在桶本身上执行此操作并将其移动到下一个桶..?我正在使用 Node.js。

最佳答案

简短的回答是,没有办法将对象从一个桶压缩到一个目标桶

然而,有一种优雅的方法可以自行完成此操作,需要三个组件:(1) GCP 发布/订阅主题,(2) Node /request-zip 服务和 ( 3) 一个云计算实例组来处理 zips

(1) 创建一个pub-sub主题

gcloud pubsub topics create request-zip
gcloud pubsub subscriptions create --topic request-zip work-zip

(2) 创建一个/request-zip服务发布到request-zip主题

下面的快速配方是伪代码,展示了如何接收文件列表并将其排入 request-zip 主题。这个电话很快。您可能想要添加一个电子邮件地址或创建另一个“完成”队列以在工作完成时通知调用者。

const express = require('express')
const app = express()
const port = 3000
const bodyParser = require('body-parser')
const {PubSub} = require('@google-cloud/pubsub');

app.use(bodyParser.json())
app.post('/request-zip', (req, res) => {


const pubsub = new PubSub({projectId});

// send the file list to the queue
sendMessageResponse = await pubsub.sendMessage("request-zip", req.body.files.join(','));
console.info(sendMessageResponse)

}
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

示例发布到 cli 上的主题以进行测试


gcloud pubsub topics publish request-zip --message "file1.txt,file2.png"

(3) 运行一个实例组来工作队列

像下面这样编写一个简短的 shell 脚本并启动几个实例来执行 zips

示例接收消息

while true; do
# i suggest testing success on all routines and then --ack at the end.
files=$(gcloud pubsub subscriptions pull work-zip --auto-ack --format json|jq -r '.
[].message.data'|base64 -d)
gsutil sync gs://my-bucket/{$files} .
zip -r archive.zip .
gsutil sync archive.zip gs://target-bucket/
rm -rf *
done

关于javascript - 是否可以使用 Node js 从一个谷歌存储桶压缩到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926153/

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