在Google上搜索后,我发现npm GCS客户端还没有任何功能。我发现我将通过运行一个实例来实现它,该实例将提供一个图像下载服务,并且它将在那里临时下载图像并将其上传到GCS存储桶。在这种情况下,我是否必须支付额外的四项费用,例如运行实例,下载图像(临时)带宽以及将图像传输/存储到GCS存储桶中。 ?
也找到一种解决方法https://cloudinary.com/documentation/fetch_remote_images cloudinary正是我正在寻找的东西。
我很想知道使用GCS存储桶是否可以实现相同的目标。如果是的话,请告诉如何?
我正在寻找理想的方法。
答案 0 :(得分:1)
假设您要使用Google Cloud Client库,我使用 Node.JS v8.9.4 和 npm版本5.6.0 从外部URL上传了图像。使用以下代码到我的存储桶中:
const {Storage} = require('@google-cloud/storage'),
request = require('request'),
bucket = 'BUCKET_NAME',
filename = 'FILE_NAME',
url = 'IMAGE_URL',
storage = new Storage({
projectId: 'PROJECT_ID',
keyFilename: 'auth.json'
});
var file = storage.bucket(bucket).file(filename);
request({url: url, encoding: null}, function(err, response, buffer) {
var stream = file.createWriteStream({
metadata: {
contentType: response.headers['content-type']
}
});
stream.end(buffer);
});
确保设置PROJECT_ID
,BUCKET_NAME
,FILE_NAME
和IMAGE_URL
;以及在本地目录中有Service Account JSON key file。
package.json的内容:
{
"dependencies": {
"@google-cloud/storage": "^2.3.3"
}
}
使用npm start server.js
运行代码。
如果您希望获得此文件的签名URL ,请添加以下在documentation中找到的额外代码:
// These options will allow temporary read access to the file
const options = {
action: 'read',
expires: '03-17-2025',
};
storage
.bucket(bucket)
.file(filename)
.getSignedUrl(options)
.then(results => {
const signed_url = results[0];
console.log(`The signed URL for ${filename} is ${signed_url}`);
})
.catch(err => {
console.error('ERROR:', err);
});
不要忘记通过修改expires
的值来将到期日期设置为您感兴趣的实际到期日期。