标签:javascript angularjs amazon-s3 google-api iframe
由于Google Doc Viewer API,我试图显示存储在iframe中S3存储桶中的.doc文件.
我已经进行了一些研究,找到了this,我尝试在此处应用:
var encodedUrl = encodeURIComponent("http://myAPI.com/1d293950-67b2-11e7-8530-318c83fb9802/example.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256%26X-Amz-Credential=GNRO0BLDYAJP1FU7ALIS%2F20170717%2Fus-east-1%2Fs3%2Faws4_request%26X-Amz-Date=20170717T145429Z%26X-Amz-Expires=600%26X-Amz-SignedHeaders=host%26X-Amz-Signature=ee556c5c92427bb38265507218a701660936bc2774ecc919648bb2d780a2619f");
$scope.selectedSource = $sce.trustAsResourceUrl(
"http://docs.google.com/gview?url=" + encodedUrl + "&embedded=true"
);
iframe看起来像:
<iframe ng-src="{{selectedSource}}" frameborder="no" style="width:100%;height:100%"></iframe>
但是我仍然从iframe中的查看器中看到“没有可用的预览”,为什么?
我指定将签名的url(未编码)粘贴到浏览器中时可以使用,因此我拥有所需的所有权利.
解决方法:
Amazon S3预签名URL包含查询字符串参数,因此它包含“?”和“&”这会混淆外部URL.
因此,您必须先对S3预签名URL进行编码,然后再将其传递给Google Doc Viewer.
像这样:
var encodedUrl = encodeURIComponent(presigned_url);
var iFrameUrl = 'https://docs.google.com/gview?url=' + encodedUrl;
或(使用S3 .NET Core API)
using (AmazonS3Client S3Client = new AmazonS3Client(accKey, secKey, new AmazonS3Config() { ServiceURL = serviceUrl }))
{
GetPreSignedUrlRequest getPreSignedUrl = new GetPreSignedUrlRequest
{
BucketName = s3BucketName,
Key = fileName,
Expires = DateTime.Now.AddMinutes(30)
};
encoded_SignedUrl = WebUtility.UrlEncode(S3Client.GetPreSignedURL(getPreSignedUrl));
}
标签:javascript,angularjs,amazon-s3,google-api,iframe 来源: https://codeday.me/bug/20191009/1881520.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。