Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何呈现来自S3的图像(文件)在前端阻止所有公共访问(私有写入、私有读取)_Node.js_Amazon Web Services_Amazon S3_Aws Sdk - Fatal编程技术网

Node.js 如何呈现来自S3的图像(文件)在前端阻止所有公共访问(私有写入、私有读取)

Node.js 如何呈现来自S3的图像(文件)在前端阻止所有公共访问(私有写入、私有读取),node.js,amazon-web-services,amazon-s3,aws-sdk,Node.js,Amazon Web Services,Amazon S3,Aws Sdk,我已使用aws sdk将文件上载到S3 bucket,如下所示: async function uploadFileToAws(file){ const fileName = `new_file_${new Date().getTime()}_${file.name}`; const mimetype = file.mimetype; const params = { Bucket: config.awsS3BucketName, Key:

我已使用aws sdk将文件上载到S3 bucket,如下所示:

async function uploadFileToAws(file){
    const fileName = `new_file_${new Date().getTime()}_${file.name}`;
    const mimetype = file.mimetype;
    const params = {
        Bucket: config.awsS3BucketName,
        Key: fileName,
        Body: file.data,
        ContentType: mimetype,
        // ACL: 'public-read'
    };
    const res = await new Promise((resolve, reject) => {
        s3.upload(params, (err, data) => err == null ? resolve(data) : reject(err));
    });
    return { secure_url: res.Location };
}
如果我们允许bucket权限公开读取,那么就没有问题,但我们有阻止公开读取(公开访问)的要求,并且仅允许通过访问Id和密钥或任何其他类似方法,在自有产品(移动和web应用程序)中可见bucket对象或图像的访问。这可能吗?aws S3是否提供此类服务


我浏览了aws s3文档,谷歌搜索,浏览了多个StackOverflow线程和一些博客,但运气不好。我真的很感激这个建议,提示,帮助。

你可以考虑两个选项。

第一种是通过CloudFront和签名URL或cookie,如中所述

基本上,在这种方法中,您将设置一个CloudFront发行版,用于为您的私有映像提供服务。由于用户经过身份验证,您的后端需要验证他们是否可以访问给定的图像,如果可以,则为该文件生成一个签名的URL。签名的url将允许访问所述文件。有关此过程的详细信息,请参见

第二种可能性是通过。它与第一个类似,只是它不涉及任何额外的服务,比如CloudFront。同样,由于用户经过身份验证,您的后端将验证他们查看给定映像的权限,并生成预签名的S3URL,使他们能够临时访问映像


在这两种情况下,bucket都不需要公开。对图像的访问由您的后端控制。

您的用户在访问图像之前是否必须首先向您的应用程序或网站进行身份验证?是的,我们在他们访问图像之前进行了用户身份验证。