0

无法将文件上传到 S3 工作。话虽如此,我知道问题出在我身上。

目前我可以使用以下方法将文件上传到 S3:https ://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html

现在,如果我将表单复制并粘贴到我的应用程序中,然后发布表单,它就可以工作了。

我正在做的下一步是将硬编码的值移动到 Angular 控制器中,以尝试在实现服务器端创建策略和签名之前通过那里上传文件,尽管它似乎不起作用。

我得到的错误是授权:承载问题。

阅读后,我尝试将授权设置为未定义,但仍然无法正常工作,我很茫然。

任何帮助,将不胜感激。

下面的代码:

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);
})
4

1 回答 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;
            }
}]);

我们使用的解决方案是修改条件语句,以便仅在需要时添加授权标头。我们将“if”语句更改为

if ($cookieStore.get('token') && config.url != "https://yourbucket.s3.amazonaws.com/")

希望这对其他人有帮助。

于 2016-08-02T16:28:26.927 回答