Javascript AngularJS S3文件上载-策略条件失败
我正在尝试使用ng文件上载模块将文件上载到S3。我得到一个错误: 根据策略无效:策略条件失败:[“eq”, “$success\u action\u status”,“201”] 我的代码基于此,略有更改: api.js:Javascript AngularJS S3文件上载-策略条件失败,javascript,angularjs,node.js,amazon-s3,Javascript,Angularjs,Node.js,Amazon S3,我正在尝试使用ng文件上载模块将文件上载到S3。我得到一个错误: 根据策略无效:策略条件失败:[“eq”, “$success\u action\u status”,“201”] 我的代码基于此,略有更改: api.js: exports.signing = function(req, res) { var request = req.body; var fileName = request.filename; var path = fileName; var readType = "pub
exports.signing = function(req, res) {
var request = req.body;
var fileName = request.filename;
var path = fileName;
var readType = "public-read";
var expiration = moment().add(5, 'm').toDate();
var s3Url = process.env.S3_URL;
var s3Policy = {
'expiration': expiration,
'conditions': [{
'bucket' : process.env.S3_BUCKET,
},
['starts-with', '$key', path],
{
'acl': readType
},
{
'succes_action_status': '201'
},
['starts-with', '$Content-Type', request.type],
['content-length-range', 2048, 10485760],
]
};
var stringPolicy = JSON.stringify(s3Policy);
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
//sign policy
var signature = crypto.createHmac('sha1', process.env.AWS_SECRET_KEY).update(new Buffer(base64Policy, 'utf-8')).digest('base64');
var credentials = {
url: s3Url,
fields: {
key: fileName,
AWSAccessKeyId: process.env.AWS_ACCESS_KEY,
acl: readType,
policy: base64Policy,
signature: signature,
'Content-Type': request.type,
success_action_status: '201'
}
};
res.jsonp(credentials);
};
controller.js
$scope.upload = function(files) {
if (files.length > 0) {
var filename = files[0].name;
var type = files[0].type;
var query = {
filename: filename,
type: type
}
};
if (files && files.length) {
for (var i=0; i < files.length; i++) {
var file = files[i];
photoService.signingS3(query).success(function(result) {
Upload.upload({
url: "https://***.s3.amazonaws.com",
method: "POST",
fields: result.fields,
transformRequest: function (data, headersGetter) {
//Headers change here
var headers = headersGetter();
delete headers['Authorization'];
return data;
},
file: file
}).progress(function(evt) {
console.log('progress: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'is uploaded successfully. Response: ' + data);
}).error(function(err) {
console.log(err);
});
}).error(function(data, status, headers, config) {
console.log(data);
});
}
}
}
$scope.upload=函数(文件){
如果(files.length>0){
var filename=文件[0]。名称;
变量类型=文件[0]。类型;
变量查询={
filename:filename,
类型:类型
}
};
if(files&&files.length){
对于(var i=0;i
你能告诉我它有什么问题吗?这里
['starts-with','$key',path]
path的值必须是:'somedirectory in s3'+fileName。另外,检查您的bucket名称是否已相应填充 此处['starts-with','$key',path]
path的值必须为'somedirectory in s3'+fileName。另外,检查您的bucket名称是否已相应填充 您的s3策略有问题,当尝试登录和上载时,请再次检查var S3Policy。您的s3策略有问题,当尝试登录和上载时,请再次检查var S3Policy。我确实在我的存储桶中创建了一个“测试”目录,但没有成功。现在根据策略我得到了无效:策略条件失败:[“开始于”、“$key”、“test/iphone.jpg”]
我确实在我的bucket中创建了一个“test”目录,但没有成功。现在,根据策略,我得到无效:策略条件失败:[“以“,”$key”,“test/iphone.jpg”]