【问题标题】:Can't upload images in nodejs using aws-sdk无法使用 aws-sdk 在 nodejs 中上传图像
【发布时间】:2013-01-08 06:08:57
【问题描述】:

我尝试使用 aws-sdk 和 knox,但在尝试上传图片时收到状态代码 301。我收到状态代码 301 和消息 - '您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来的请求发送到此端点。这适用于 php。

AWS.config.loadFromPath(__dirname + '/config/config.json');
fs.readFile(source, function (err, data) {
var s3 = new AWS.S3();
    s3.client.createBucket({Bucket: 'mystuff'}, function() {
       var d = {
            Bucket: 'mystuff',
            Key: 'img/test.jpg',
            Body: data,
            ACL: 'public-read'
            };
       s3.client.putObject(d, function(err, res) {
            if (err) {
                console.log("Error uploading data: ", err);
                callback(err); 
            } else {
                console.log("Successfully uploaded data to myBucket/myKey");
                callback(res);   
            }
        });
    });
}); 

【问题讨论】:

    标签: node.js amazon-s3


    【解决方案1】:

    您尝试过 .send() 吗?

    我可以通过以下代码上传到 S3。

    http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/AWSRequest.html

    var s3object = {Bucket: 'mystuff', Key: name, Body : data['data']};
        s3.client.putObject(s3object).done(function(resp){
          console.log("Successfully uploaded data");
        }).fail(function(resp){
          console.log(resp);
        }).send();
    

    【讨论】:

    • 我得到同样的错误 { 代码:'PermanentRedirect',消息:'您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来请求发送到此端点。',状态代码:301,可重试:false }
    【解决方案2】:

    我实际上解决了这个问题。在您的配置中,您必须有一个区域,因为我的存储桶是“美国标准”,我将我的区域留空并且它有效。 config.json - { "accessKeyId": "secretKey", "secretAccessKey": "secretAccessKey", "region": ""}

    转到 s3 管理控制台,选择您的文件之一,然后单击 proporties -> 查看文件链接。 美国标准 https://s3.amazonaws.com/yourbucket/ 在您的控制台窗口中托管 yourbucket.s3.amazonaws.com/

    us-west-1 https://s3-us-west-1.amazonaws.com/yourbucket/ 在您的控制台窗口中托管 yourbucket.s3-us-west-1.amazonaws.com/

    【讨论】:

    • 将区域设置为空白对我来说是这样
    • 我的是新加坡,所以设置 "region": "ap-southeast-1" 为我解决了这个问题。谢谢:-)
    【解决方案3】:

    我在使用新 SDK 时遇到了同样的问题,并通过显式设置端点选项解决了这个问题。

    参考:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor_details

    片段:

    var AWS = require('aws-sdk'); 
    
    var s3 = new AWS.S3({ endpoint :'https://s3-your-region-varies.amazonaws.com' }),
        myBucket = 'your-bucket-name';
    
    var params = {Bucket: myBucket, Key: 'myUpload', Body: "Test"};
    
    s3.putObject(params, function(err, data) {
        if (err)  {
            console.log(err) 
        } else {
            console.log("Successfully uploaded data to "+myBucket+"/testKeyUpload");
        }
    });
    

    或者,您可以通过在配置文件中设置区域来解决此问题,并且您只需要准确的区域名称即可。

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2016-05-29
      • 1970-01-01
      • 2023-04-09
      • 2019-06-25
      • 2015-04-18
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多