繁体   English   中英

AWS S3 deleteObject无法使用Node JS工作

AWS S3 deleteObject not working using Node JS

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经使用Node.js实现了AWS S3 SDK,以便使用签名的URL将图像文件上传到S3。 此功能运行良好,但是我现在需要一个可以删除上载对象的功能。 我已经创建了以下代码,但无法正常工作。 实际上,尽管该函数正在运行,但似乎根本没有调用s3.deleteObject。 我是Node的新手,所以可能犯了一个愚蠢的错误。 有人可以帮忙吗?

设置模板:

AWSTemplateFormatVersion:2010-09-09转换:AWS :: Serverless-2016-10-31说明:S3 Uploader-示例应用程序

Resources:
  # HTTP API
  MyApi:
    Type: AWS::Serverless::HttpApi
    Properties:
      # CORS configuration - this is open for development only and should be restricted in prod.
      # See https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-httpapi-httpapicorsconfiguration.html   
      CorsConfiguration:
        AllowMethods:
          - GET
          - POST
          - DELETE
          - OPTIONS
        AllowHeaders:
          - "*"   
        AllowOrigins: 
          - "*"      

  ## Lambda functions
  UploadRequestFunction:
    # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: getSignedURL/
      Handler: app.handler
      Runtime: nodejs12.x
      Timeout: 3
      MemorySize: 128
      Environment:
        Variables:
          UploadBucket: !Ref MyAppS3  
      Policies:
        - S3WritePolicy:
            BucketName: !Ref MyAppS3
        ## This permission allows the Lambda function to request signed URLs
        ## for objects that will be publicly readable. Uncomment if you want this ACL.
        - Statement:
          - Effect: Allow
            Resource: !Sub 'arn:aws:s3:::${MyAppS3}/'
            Action:
              - s3:putObjectAcl
      Events:
        UploadAssetAPI:
          Type: HttpApi
          Properties:
            Path: /uploads
            Method: get
            ApiId: !Ref MyApi  

  DeleteRequestFunction:
    # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: deleteObj/
      Handler: app.handler
      Runtime: nodejs12.x
      Timeout: 3
      MemorySize: 128
      Environment:
        Variables:
          DeleteBucket: !Ref MyAppS3  
      Policies:
        - S3WritePolicy:
            BucketName: !Ref MyAppS3
        - Statement:
          - Effect: Allow
            Resource: !Sub 'arn:aws:s3:::${MyAppS3}/'
            Action:
              - s3:putObjectAcl
      Events:
        deleteAssetAPI:
          Type: HttpApi
          Properties:
            Path: /delete
            Method: get
            ApiId: !Ref MyApi  

  ## S3 bucket
  SMyAppS3:
    Type: AWS::S3::Bucket
    Properties:
      CorsConfiguration:
        CorsRules:
        - AllowedHeaders:
            - "*"
          AllowedMethods:
            - GET
            - PUT
            - HEAD
          AllowedOrigins:
            - "*"

## Take a note of the outputs for deploying the workflow templates in this sample application
Outputs:
  APIendpoint:
    Description: "HTTP API endpoint URL"
    Value: !Sub "https://${MyApi}.execute-api.${AWS::Region}.amazonaws.com"
  S3UploadBucketName:
    Description: "S3 bucket for application uploads"
    Value: !Ref 'MyAppS3'    

删除物件

/ *从MyApp S3存储桶中删除对象* /

'use strict'

const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.AWS_REGION })
const s3 = new AWS.S3()

// Main Lambda entry point
exports.handler = async (event) => {
  return await deleteObj(event)
}

const deleteObj = async function(event) {
  const params = {
    Bucket: process.env.DeleteBucket, 
    Key: '66910301611586034.jpg'
  };

  s3.deleteObject(params, function(err, data) {
    if (err) {
      console.log(err, err.stack);
    } else {
      console.log('file successfully deleted');
    } 
  });
}

获取签名的对象

'use strict'

const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.AWS_REGION })
const s3 = new AWS.S3()

// Change this value to adjust the signed URL's expiration
const URL_EXPIRATION_SECONDS = 300

// Main Lambda entry point
exports.handler = async (event) => {
  return await getUploadURL(event)
}

const getUploadURL = async function(event) {
  const randomID = parseInt(Math.random() * 10000000)
  const secondsSinceEpoch = Math.round(Date.now() / 1000)
  const Key = `${randomID}${secondsSinceEpoch}.jpg`

  // Get signed URL from S3
  const s3Params = {
    Bucket: process.env.UploadBucket,
    Key,
    Expires: URL_EXPIRATION_SECONDS,
    ContentType: 'image/jpeg',
    // This ACL makes the uploaded object publicly readable. You must also uncomment
    // the extra permission for the Lambda function in the SAM template.
    ACL: 'public-read'
  }

  console.log('Params: ', s3Params)
  const uploadURL = await s3.getSignedUrlPromise('putObject', s3Params)

  return JSON.stringify({
    uploadURL: uploadURL,
    Key
  })
}
问题暂未有回复.您可以查看右边的相关问题.
2 从Node.JS(JavaScript)擦除AWS / S3对象

我有一个使用mLab作为数据库的Node.JS应用程序,还使用AWS / S3来存储文件。 我刚刚实现了一项功能,该功能允许用户从mLab数据库中删除信息,这很好。 我仍然要做的一件事是从AWS / S3中删除可能的相关信息,而我还不知道该怎么做。 我已经浏览了网上,看到了几件事, ...

3 为什么我的访问在 s3 上被拒绝(使用 Node.js 的 aws-sdk)?

我正在尝试从我的 s3 存储桶中读取现有文件,但我一直收到“拒绝访问”的消息,但没有解释或说明如何处理。 这是我正在使用的代码: 这就是我在使用get方法并记录回调中提供的错误时得到的输出(敏感信息被删除): 现在我不确定该怎么做,因为我认为我根据文档正确地做事,但它不起作用,错误消息没有 ...

6 我们如何使用AWS / S3?

我需要一些简单的示例来开始使用AWS / S3。 这是情况; 我的一个iOS应用程序已从Parse.com转移到Parse-Server / Heroku。 一切工作正常,但在某些时候我将需要用于图像或声音文件的文件存储。 我已经按照此步骤配置了S3Adapter。 我现在的问 ...

8 通过Cloudfront和AWS的S3存储桶的https无法正常工作

我已经通过在Youtube中学习教程来完成了所有工作,因此我成功地使Cloudfront发行版的域名链接到了我的S3存储桶,其中仅包含index.html。 (网址中有一个小锁图标)。 这里的问题是,当我将Angular dist文件夹上传到同一存储桶时,我也可以访问内容; 但是,小锁图标变为带 ...

9 node.js&S3 /使用knox写入s3

我正在尝试通过以下代码使用Knox编写S3: 对于大文件,它给我以下错误(我检查了900MB的文件): 证书还可以,我成功使用Amazon和其他npm软件包的密钥和秘密访问密钥登录。 此外,我成功使用Knox上传了小文件。 我知道它发生连接错误,但是我不明白为什么会发生错 ...

10 使用适用于Node.js / Restify的AWS开发工具包通过POST将数据上传到S3

我试图弄清楚如何通过我在Node.js / Restify中编写的RESTful API将数据上传到Amazon S3存储桶。 我认为我已经使所有基本概念都起作用了,但是当我连接到POST请求的正文时,事情就出现了问题。 当我将回调函数设置为仅将字符串传递给S3时,它就可以正常工作,并且文件 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM