如何仅通过使用npm GCS客户端发送图像URL在Google Cloud Storage存储桶中下载/存储图像/文件?

时间:2018-12-17 04:18:23

标签: google-cloud-platform google-cloud-storage

在Google上搜索后,我发现npm GCS客户端还没有任何功能。我发现我将通过运行一个实例来实现它,该实例将提供一个图像下载服务,并且它将在那里临时下载图像并将其上传到GCS存储桶。在这种情况下,我是否必须支付额外的四项费用,例如运行实例,下载图像(临时)带宽以及将图像传输/存储到GCS存储桶中。 ?

也找到一种解决方法https://cloudinary.com/documentation/fetch_remote_images cloudinary正是我正在寻找的东西。

我很想知道使用GCS存储桶是否可以实现相同的目标。如果是的话,请告诉如何?

我正在寻找理想的方法。

1 个答案:

答案 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_IDBUCKET_NAMEFILE_NAMEIMAGE_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的值来将到期日期设置为您感兴趣的实际到期日期。