如何使用Angular / Node ng-file-upload将文件上传到S3

问题描述 投票:0回答:1

无法将文件上传到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);
})
angularjs node.js amazon-s3 ng-file-upload
1个回答
1
投票

我花了很长时间试图找到解决方案,最后使它起作用。 我希望此解决方案可以帮助其他人。 在我的情况下,问题是由我们的应用程序使用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/")

希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.