private void GetWebUrl() { var request = new GetPreSignedUrlRequest().WithBucketName(bucketName) .WithKey("test/content.htm"); request.WithExpires(DateTime.Now.Add(new TimeSpan(0,50))); var url = S3.GetPreSignedURL(request); Iframe2.Attributes.Add("src",url); }
访问与此HTML文件相关的图像和样式表的最佳方法是什么?我可以查找所有图像,然后使用上面的方法生成预先签名的URL请求,但这不是一种有效的方法,我无法公开图像和样式表.有没有其他人遇到过类似的问题?
此外,如果我使用Rest API对用户进行身份验证(使用身份验证标头)以便浏览器在标头中具有身份验证信息并且我不必为每个对象创建预先签名的URL,这样会更好吗? REST API的一小段代码非常有用.
解决方法
src:"StreamFile.ashx?file="ObjKey"
现在,要更改源代码,您可以更新旧的HTML文件,并使用指向(StreamFile.ashx)Generic Handler的源创建新的HTML文件,或使用URL重写将旧URL写入新URL.这可以在IIS或web.config中完成.如果您在IIS中执行此操作,它将自动在您的web.config中添加代码.
<system.webServer> <rewrite> <rules> <rule name="Content"> <match url="DevelopmentContent/Course/([a-zA-Z0-9]+)" /> <action type="Rewrite" url="StreamFile.ashx/?file=course{R:1}" /> </rule> </rules> </rewrite> </system.webServer>
上面的代码将在Src字符串中查找“DevelopmentContent / Course /”,如果找到则会将URL重写为StreamFile.ashx /?file = course {R:1}. R:1将是URL粗体部分的其余部分(DevelopmentContent / Course / xyz / xsd / x / sd / ds.htm),它应该映射到amazon S3中的对象键.在StreamHandler.ashx中现在将接收来自具有指定URL的服务器.然后,您可以从查询字符串(context.Request.QueryString [“file”])获取对象键,然后创建一个函数来获取所需的对象.
public void ProcessRequest(HttpContext context) { var response = Gets3Response(context.Request.QueryString["file"]); if (response != null) { using (response) { var mimEtype = response.ContentType; context.Response.ContentType = mimEtype; using (var responseStream = response.ResponseStream) { var buffer = new byte[8000]; var bytesRead = -1; while ((bytesRead = responseStream.Read(buffer,buffer.Length)) > 0) { context.Response.OutputStream.Write(buffer,bytesRead); } } context.Response.Flush(); context.Response.End(); } } else { context.Response.Write("Unable to retrieve content!"); } } public bool IsReusable { get { return false; } } } private static GetobjectResponse Gets3Response(string fileName) { GetobjectResponse response; if (fileName.Trim().Length == 0) { return null; } try { var request = new GetobjectRequest(); request.WithBucketName(BucketName).WithKey(fileName); response = AmazonS3ClientProvider.CreateS3Client().Getobject(request); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { } return null; } catch (Exception ex) { return null; } return response; }
所以现在所有的HTTP请求都将使用您的服务器作为代理.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。