当前位置: 首页 > 知识库问答 >
问题:

PHP Amazon S3通过URL访问私人文件

齐运诚
2023-03-14

我正在使用AWS PHP sdk在S3上保存图像。文件是私下保存的。然后,我在Web应用程序中使用S3文件url显示图像缩略图,但由于文件是私有的,因此图像显示为损坏。

当用户单击文件名时,会打开一个模态以显示更大大小的文件,但由于相同的问题,文件也显示为损坏。

现在,我知道有两种方法可以让它发挥作用。1、公开文件。2、为文件生成预签名URL。但由于我项目的要求,我不能选择这两个选项中的任何一个。

我的问题是,有没有第三种方法可以解决这个问题?

共有3个答案

王宏深
2023-03-14

据我所知,您可以尝试将S3存储桶设为这样的“Web服务器”,但您可能会“公开文件”。然后,如果您有某种逻辑来限制访问,您可以创建一个桶策略

曾嘉福
2023-03-14

您需要通过服务器上的脚本访问文件。该脚本将执行某种身份验证以确保请求有效并且您希望他们查看文件。然后使用可以访问私有文件的有效IAM配置文件从S3获取文件。输出文件

不是从S3请求文件,而是从http://www.yourdomain.com/fetchimages.php?key=8498439834

下面是fetchimages中的一些伪代码。php

<?php

//if authorized to get this image

$key=$_GET['key'];
//validate key is the proper format

//get s3 url from a database based on the $key

//connect to s3 securely and read the file from s3

//output the file

?>
秦凯旋
2023-03-14

我强烈建议不要这样做,但您可以在自己的服务器上创建一个脚本,通过API提取图像,缓存并提供服务。然后,您可以随心所欲地限制访问,而无需公开图像。

示例传递脚本:

$headers = get_headers($realpath); // Real path being where ever the file really is

foreach($headers as $header) {
    header($header);
}
$filename = $version->getFilename();

// These lines if it's a download you want to do
// header('Content-Description: File Transfer');
// header("Content-Disposition: attachment; filename={$filename}");

$file = fopen($realpath, 'r');
fpassthru($file);
fclose($file);
exit;

这几乎不会“触及侧面”,也不会过多延迟文件的出现,但仍然需要一些资源和带宽。

 类似资料:
  • 问题内容: 我无法让Jenkins通过SSH在BitBucket上克隆git存储库。出现以下消息失败: 采取的步骤 创建一个SSH密钥对 将公共密钥添加为BitBucket上存储库的部署密钥 在Jenkins Credentials Manager插件中安装SSH密钥和用户名(尝试过’git’和我的BB帐户名) 尝试使用URL的形式在构建中克隆存储库 我也尝试过不使用凭据管理器并手动将密钥安装在中

  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要

  • 当生成发票的PDF文件时,我试图在Spring后端中使用Angular应用程序中的徽标。 invoice.logo.url=http://localhost:4200/assets/gfx/img/logos/rkmteam-logo.png 该图像不会显示在PDF中,但当我将其上载到imgur时。com,那么它工作得很好。 手动访问url有时会显示图片,但有时会给我这个错误: 如何访问外部应用程

  • 我正在将文件从php上传到s3bucket.its上传成功,但当我检索图像时,我得到以下错误 如果我在上传文件时设置为公开,那么我可以检索它,但我想防止未经授权的用户。 上载文件代码 在问问题之前,我已经参考了许多网站,但它对我没有帮助 Amazon S3查看私人文件 PHP Amazon S3通过URL访问私人文件 如何通过Zend_Service_Amazon_S3访问Amazon s3私有桶

  • 问题内容: 是否可以获取文档中CSS文件的全部文本内容?F.ex: 我不是真的通过document.styleSheets获取所有CSS规则,还有另一种方法吗? 更新: 当然有ajax选项,我感谢给出的答案。但是似乎没有必要使用已经在浏览器中加载的ajax重新加载文件。因此,如果有人知道提取当前CSS文件的文本内容的另一种方法(不是CSS规则),请发表! 问题答案: 如果样式表包含在同一个域中,则

  • 问题内容: 我正在整理一些演示页面,而我想演示的一件事涉及通过后续处理动态获取HTML片段。因此,我得到了如下简单的jQuery代码: 我通过file:// URL执行所有操作,因为整个过程都是我(可能)通过拇指驱动器或其他工具运行的演示的一部分。因此,“ content_fragment.html”只是另一个本地文件,就像包含该代码的主页一样。 现在,这一切都可以在Firefox或Safari上