【问题标题】:Amazon S3 on Heroku with PHPHeroku 上的 Amazon S3 和 PHP
【发布时间】:2012-07-18 15:07:04
【问题描述】:

我想为我的 Heroku 应用程序启用我的 Amazon S3 存储桶。

在 Heroku 之前,我使用 s3fs 直接挂载目录。现在这在 Heroku 上是不可能的,有没有其他方法可以将它们“链接”在一起,可能仍然保持上传(和调整大小)脚本仍然有效?

【问题讨论】:

  • S3 on github有几个php库。
  • 您是如何处理这个问题的?以下任何答案有帮助吗?你是怎么解决的?还是你到现在都没有解决?您还可以举一个上传和调整脚本大小的示例吗?
  • 你在做批处理吗?或者您是通过表单上传文件并即时将它们移动到 s3 存储桶?还是其他实现?这些信息将帮助我们回答。
  • http://net.tutsplus.com/tutorials/php/how-to-use-amazon-s3-php-to-dynamically-store-and-manage-files-with-ease/?search_index=3
    此链接提供了如何将文件上传到 amazon s3 的分步说明。请查看此链接。
  • 您的问题没有得到回答,因为它不清楚。 “链接”是什么意思?你到底想达到什么目的?有几个 PHP 库可以帮助您将文件上传到 S3。

标签: php file-upload heroku amazon-s3


【解决方案1】:

我想这仍然是可能的。你看过Using AWS S3 to Store Static Assets and File Uploads吗?

【讨论】:

  • 是的。我需要的是“直通上传”选项。没有给出示例。
  • 它指向 Paperclip gem,您可以找到更多关于它的信息:github.com/thoughtbot/paperclip。使用回形针(或carrierwave,另一种宝石)处理上传到 S3 的过程相当轻松。
  • 如果这是一个相当轻松的过程,为什么没有人回答这个问题?
【解决方案2】:

根据您的脚本的功能,您可能需要稍微更改它们。

首先我应该声明我从来没有这样做过,所以我可能会遗漏一些细节,但根据我在 PHP、Heroku 和 S3 方面的经验,它应该像接受上传的文件一样简单(将存储在 Heroku 服务器上的某个临时目录中),调整它的大小,最后上传到 S3。

如果您已经有上传工作流,唯一的区别应该是,不是将文件保存到服务器中的目录(根据您的说法,这实际上是一种指向 S3 存储桶的符号链接),您现在将其上传到 S3。你可以使用这个库轻松做到这一点:https://github.com/tpyo/amazon-s3-php-class

类似这样的:

// Ink is expensive, let's write less
$file = $_FILES['uploadedfile']['tmp_name'];
$name = $_FILES['pictures']['name'];

// Resize the image
resize($file);

// Normally you would do this for storing the file locally
// move_uploaded_file($file, "$destinationdir/$name");

// Now you want to upload to S3
$s3 = new S3($awsAccessKey, $awsSecretKey);
$s3->putObject($s3->inputFile($file, false), $bucketName, $uploadName, S3::ACL_PUBLIC_READ)

根据您组织上传的方式,您可能还希望保留存储桶名称和文件名的记录,也许在您可以搜索文件名并获取存储桶名称的数据库表中,因为您将两者都需要检索文件。

【讨论】:

    【解决方案3】:

    您需要手动获取上传的文件并上传到 S3,请记住,Heroku 有一个只读文件系统,因此您无法在 Heroku 应用程序上创建临时文件,每次操作都需要在内存中完成。

    这里是S3 php api

    一个例子:

    // get uploaded file
    $file = $_FILES['uploadedfile']['tmp_name'];
    
    // do whatever manipulation on the file in memory
    // $file = resize($file)
    
    // upload file to S3, note, S3->putObjectFile won't work, as it require $file parameter to be string
    if (S3::putObject(S3::inputFile($file), $bucket, $uri, S3::ACL_PRIVATE)) {
        echo "File uploaded.";
    } else {
        echo "Failed to upload file.";
    }
    

    更新

    看起来 S3 php lib 没有用于从内存上传资源的 api,S3::inputFile 需要一个字符串作为输入,而不是在内存资源中。 所以结论是:在 Heroku 上使用 S3 PHP 客户端是不可能的

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 2020-05-04
      • 2014-03-14
      • 2012-01-31
      • 2012-10-24
      • 2011-07-24
      相关资源
      最近更新 更多