无法将文件上传到S3。 话虽如此,我知道问题已经到了尽头。
目前,我可以使用以下文件将文件上传到S3: https : //s3.amazonaws.com/doc/s3-example-code/post/post_sample.html
现在,如果我将表单复制并粘贴到我的应用程序中,然后只需将表单发布即可。
我正在做的下一步是将硬编码的值移到Angular控制器中,以尝试通过该文件上载文件,然后再实施服务器端创建策略和签名,尽管这似乎不起作用。
我得到的错误是授权:承载问题。
阅读后,我尝试将“授权”设置为undefined,但仍然无法正常工作,我很茫然。
任何帮助,将不胜感激。
代码如下:
var mypolicy = "HardcodedPolicy;
var mysignature = "HardcodedSignature";
var s3url = "https://myBucket.s3.amazonaws.com/";
Upload.upload({
url: s3url,
method: 'POST',
headers: {
'Authorization': undefined
},
data: {
key: 'testfile.txt',
acl: 'public-read',
"Content-Type": 'text/plain',
AWSAccessKeyId: 'XXX',
policy: mypolicy,
signature: mysignature,
file: uploadfile
}
}).error(function(err) {
console.log("err: ", err);
})
我花了很长时间试图找到解决方案,最后使它起作用。 我希望此解决方案可以帮助其他人。 在我的情况下,问题是由我们的应用程序使用jwt令牌对用户进行身份验证来实现的,只要他们对我们的api进行调用即可。 添加令牌的代码在这样一个有角度的工厂中:
App.factory('authInterceptor', ['$rootScope', '$q', '$cookieStore', '$location','$window', function ($rootScope, $q, $cookieStore, $location, $window) { return { // Add authorization token to headers request: function (config) { config.headers = config.headers || {}; if ($cookieStore.get('token')) { config.headers.Authorization = 'Bearer ' + $cookieStore.get('token'); } return config; } }]);
我们使用的解决方案是修改conditon语句,以便仅在需要时添加授权标头。 我们将'if'语句更改为
if ($cookieStore.get('token') && config.url != "https://yourbucket.s3.amazonaws.com/")
希望这对其他人有帮助。