首页 > 解决方案 > S3如何查找对象是否具有预签名的URL?

问题描述

学习 S3 我知道如何生成预签名 URL:

const aws = require('aws-sdk')
const s3 = new aws.S3()
aws.config.update({
  accessKeyId: 'id-omitted', 
  secretAccessKey: 'key-omitted'
})

const myBucket = 'foo'
const myKey = 'bar.png'
const signedUrlExpireSeconds = 60 * 5

const url = s3.getSignedUrl('getObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

console.log(`Presigned URL: ${url}`)

通过阅读文档,我可以检索存储桶中的内容,headObject但我已经测试过尝试查找对象是否已经具有预签名 URL:

第一次尝试:

let signedUrl = await s3.validSignedURL('getObject', params).promise()
console.log(`Signed URL: ${signedUrl}`)

第二次尝试:

await s3.getObject(params, (err, data) => {
  if (err) console.log(err)
  return data.Body.toString('utf-8')
})

第三次尝试:

let test = await s3.headObject(params).promise()
console.log(`${test}`)

而我的能力不足。我知道在创建预签名 URL 时可以创建文件或记录到文件中,但我认为这将是一个 hack。有没有办法在节点中检查一个对象,看看它是否有一个为它创建的预签名 URL?我不想在仪表板中执行此操作,我正在寻找一种仅在终端/脚本中执行此操作的方法。浏览标签并查询谷歌我没有找到任何运气

参考:

标签: node.jsamazon-web-servicesurlamazon-s3

解决方案


有没有办法在节点中检查一个对象,看看它是否有一个为它创建的预签名 URL?

简短的回答:没有

长答案:没有关于存储在对象上的签名 url 或任何已创建 url 列表的信息。您甚至可以在客户端完全创建一个签名的 url,而无需调用任何服务


推荐阅读