如何使用node.js对Heroku上的s3进行pass-thru上传?

Dax*_*ohl 5 heroku amazon-s3 node.js knox-amazon-s3-client

这是我目前的代码.我正在使用express和knox,我认为我没有做任何异常,但是s3.putFile响应400状态代码但是null错误,并且文件没有上传.

var express = require('express');
var knox = require('knox');

var app = express();
app.use(express.bodyParser());

var s3 = knox.createClient({
    key: process.env.AWS_ACCESS_KEY_ID,
    secret: process.env.AWS_SECRET_ACCESS_KEY,
    bucket: process.env.S3_BUCKET_NAME
});

app.post('/upload', function(req, res, next) {
    var photo = req.files.photo;
    var s3Headers = {
      'Content-Type': photo.type,
      'x-amz-acl': 'public-read'
    };

    s3.putFile(photo.path, photo.name, s3Headers, function(err, s3response){
      //handle, respond
    });
});
Run Code Online (Sandbox Code Playgroud)

这个相同的代码甚至可以从cloud9在线编辑器/调试器中运行,而不是来自Heroku.我猜这与" 短暂的文件系统 "有关,但这只是猜测.然而,我能够使用noirweavejester的aws sdk在Clojure中使用s3 pass-thru上传工作,因此它必须在节点中也可以.

Dax*_*ohl 2

我偶然发现了一个修复\xe2\x80\x94一旦我将以下内容添加到package.json,它就开始工作了。否则 Heroku 默认为 0.4。

\n\n
"engines": {\n  "node": "0.8.x"\n}\n
Run Code Online (Sandbox Code Playgroud)\n