AWS S3授予对整个文件夹的访问权限 - C#

时间:2016-05-06 14:47:48

标签: c# amazon-web-services amazon-s3

我正在寻找创造性的方法来解决一个棘手的问题。我需要通过C#代码才能做到这一点,没有网站配置。

我的用户上传了一个“文件包”。这些是通常 HTML文件,包含图像和其他资源的相对路径。目前我将它们存储在S3存储桶的文件夹中。到目前为止没有问题。

当我需要将此文件提供给客户端时,会出现问题。我需要一种方法让他们在X时间内访问HTML文件,同时保持URL链接的完整性。

例如 - File.html引用了fish.png -

 'This for adding listbox 2 items from listbox 1
        For Each item As ListViewItem In ListView1.Items
            ListView2.Items.Add(item.Text)
        Next
        'this for copingall items from listbox2 into an array list
        For Each item As ListViewItem In ListView2.Items
            GlobalVariable.containsListBox2Item.Add(item.Text)
        Next

如果我授予他们访问File.html的权限,则鱼图像会被破坏,因为他们无法访问“fish.png”。如果我授予他们访问权限,则链接仍然被破坏,因为src没有安全令牌。我甚至尝试授予对文件夹和两个文件的访问权限,但图像仍然被破坏。我也无法下载内容,因为这样做会使资源在X时间内无法使用。

我希望我的问题很明确。我一般都是S3开发的新手。任何帮助表示赞赏。

编辑 - 我想补充一点,修改HTML文档链接不是一种选择。它们并不总是上传HTML,它可能是Flash文件或其他文件类型。我需要维护文档链接引用。

3 个答案:

答案 0 :(得分:0)

您需要首先弄清楚为什么他们可以访问整个文件夹,但它不起作用。

如果他们有权访问该文件夹,并且这两个文件都在该文件夹中,并且图像链接没有路径,那么它应该可以正常工作。在您解决该用例之前,让基于时间的网址正常工作是不可取的。

您可能希望确保大小写是正确的 - 这在s3中很重要,而如果您习惯在IIS中运行它通常不会。

答案 1 :(得分:0)

执行此操作的一种可能方法是将IMAGE文件设为公开,并将HTML文件设为“已签名的网址”。您可以在引用图像文件的签名URL上设置到期时间。图像文件显然不会过期,但是对引用图像文件的HTML文件的访问将会过期。

不是最漂亮的解决方案,但问题也不是很好。 ; - )

您可以在此处详细了解预签名网址:Generate a Pre-signed Object URL using AWS SDK for .NET

答案 2 :(得分:0)

这可能有点矫枉过正,但我​​认为它会起作用。

当用户请求文件时,您将文件和文件中引用的任何文件复制到公共区域(可能在使用GUID作为名称的目录中,以便其他用户无法轻易猜到)。

然后,当时间到期时,您只需删除新目录。