我假设您正在尝试直接从单页应用程序中的客户端上传到 S3 存储桶。如果是这样,您可以先对 S3 URL 进行预签名,然后尝试在 ng-file-upload 中使用它。预签名 URL 允许您向可能无法直接访问执行操作的其他用户授予一次性访问权限。预签名会生成一个使用您的凭据签名的有效 URL,任何用户都可以访问该 URL。默认情况下,SDK 生成的 URL 会在 15 分钟后过期。
要生成一个简单的预签名 URL,允许任何用户将对象放入您拥有的存储桶中,您可以使用以下 getSignedUrl() 调用:
//Initialize the SDK with Cognito Credentials
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myKey'};
var url = s3.getSignedUrl('putObject', params);
console.log("Use this url in ng-file-upload", url);
有关获取预签名 URL 的更多信息,请参阅此 wiki http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-examples.html#Amazon_S3__Getting_a_pre-signed_URL_for_a_PUT_operation_with_a_specific_payload并查阅 ng-file-upload 文档