如何使用 nodejs / angular 删除 Amazon s3 文件

How to delete Amazon s3 file w/ nodejs / angular

var awsSdk = require('aws-sdk');

awsSdk.config = {
  "accessKeyId": "key",
  "secretAccessKey": "secret",
  "region": "us-east-1"
}

var s3 = new awsSdk.S3({
  accessKeyId: 'key',
  secretAcessKey: 'secret'
});

exports.awsDelete = function(req, res){
  s3.deleteObject({
    Bucket: 'bucket',
    Key: req.body.photo
  }, function(err,data){
    if (err) console.log('delete err', err);
    console.log(data);
  });
};

我(还)不知道如何进行这项工作。

最初,我遇到了 "no config" 错误,所以我在上面添加了 awsSdk.config json。现在,它只是挂起/暂停而没有错误。我在 req.body.photo.

中得到了预期的密钥

我的直觉是我的配置中遗漏了一些东西..

我错过了什么/搞砸了什么?


更新 我已经添加了下面建议的代码,但仍然没有运气。我将展示我是如何传递我的参数的:

更新了以下答案的代码:

'use strict';

var aws = require('./aws');

var amazon = require('aws-sdk');

amazon.config = new amazon.Config();
amazon.config.accessKeyId = aws.key;
amazon.config.secretAccessKey = aws.secret;
amazon.config.region = aws.region;

var s3 = new amazon.S3();

exports.awsDelete = function(req, res){
  var params = {
    Bucket: aws.bucket,
    Key: res.body.photo
  };
  s3.deleteObject(params, function(err, data) {
    if (err) console.log(err)
    else console.log("Successfully deleted myBucket/myKey");
 });
};

路线:

  app.post('/awsDelete', uploads.awsDelete);

前端Angular:

工厂:

angular.module('clientApp').factory('Uploads', function($http) {
  return {
    delete: function(data){
        console.log('delete fired');
        return $http.post('/awsDelete', data);
    }
  };
});

angular 控制器:

angular.module('clientApp').controller('Distiller-editCtrl', function(Uploads){

$scope.item = {}

 $scope.delete = function(){
   Uploads.delete($scope.item).then(function(res){
    console.log(res)
    });
   };
 });

似乎是 'sort of works'。但是有些事情让它花费了非常长的时间:

POST /awsDelete 200 120007ms

如果我刷新页面,它也会成功删除它。 有没有人注意到我的代码中有什么可能导致这么长的响应时间。

此外,没有得到 "successfully completed" console.log

我刚刚在 node 中测试了它,它工作正常,显然你需要输入你自己的 accesskey、secretaccesskey、bucket 和 bucket key:

var AWS = require('aws-sdk'); 

AWS.config = new AWS.Config();
AWS.config.accessKeyId = "";
AWS.config.secretAccessKey = "";
AWS.config.region = "us-east-1";

var s3 = new AWS.S3();

var params = {
  Bucket: 'test537658ghdfshgfd', 
  Key: '1.png'
};

s3.deleteObject(params, function(err, data) {
    if (err) console.log(err)     
    else console.log("Successfully deleted myBucket/myKey");   
});

或者您可以使用 Minio-Js 客户端库,它是开源的并且与 AWS S3 兼容。

下面是移除-object.js的例子,你可以找到完整的列表here

var Minio = require('minio')

var s3Client = new Minio({
  endPoint: 's3.amazonaws.com',
  accessKey: 'YOUR-ACCESSKEYID',
  secretKey: 'YOUR-SECRETACCESSKEY'
})
// Remove an object name my-objectname.
s3Client.removeObject('my-bucketname', 'my-objectname', function(e) {
  if (e) {
    return console.log(e)
  }
  console.log("Success")
})

请将 YOUR-ACCESSKEYID 和 YOUR-SECRETACCESSKEY 替换为您自己的,并将端点替换为您创建存储桶的端点。

   us-east-1: 's3.amazonaws.com',
   us-west-1 : 's3-us-west-1.amazonaws.com',
   us-west-2 : 's3-us-west-2.amazonaws.com',
   eu-west-1: 's3-eu-west-1.amazonaws.com',
   sa-east-1: 's3-sa-east-1.amazonaws.com',
   eu-central-1: 's3-eu-central-1.amazonaws.com',
   ap-southeast-1: 's3-ap-southeast-1.amazonaws.com',
   ap-southeast-2: 's3-ap-southeast-2.amazonaws.com',
   ap-northeast-1: 's3-ap-northeast-1.amazonaws.com'

正在安装 Monio-js

$ npm install --save minio

希望对您有所帮助。

免责声明:我为 Minio 工作。