使用PHP从Amazon s3压缩并下载文件

凯恩

我正在使用托管在Amazon Elastic Beanstalk上的php创建我的第一个Web应用程序,而我该做什么了。我的任务是在AWS S3云中访问最终客户指定的文件,将其压缩,最后提供指向生成的zip文件的下载链接。我已经做了大量的工作来寻找我到底想做什么的一个实例,但是我对php的缺乏经验一直在确定某种解决方案是否对我有用。

我在这里找到了这个问题和答案,并且看到它似乎可以解决一般意义上的php和zip下载问题,我认为我也许可以使其适应我的需求。以下是我在php中的内容:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

require "./aws.phar";
use Aws\S3\S3Client;

$client = S3Client::factory(array(
    'key'    => getenv("AWS_ACCESS_KEY_ID"),
    'secret' => getenv("AWS_SECRET_KEY")
));

echo "Starting zip test";

$client->registerStreamWrapper();

// make sure to send all headers first
// Content-Type is the most important one (probably)
//
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="file.zip"');

// use popen to execute a unix command pipeline
// and grab the stdout as a php stream
// (you can use proc_open instead if you need to 
// control the input of the pipeline too)
//
$fp = popen('zip -r - s3://myBucket/test.txt s3://myBucket/img.png', 'r');

// pick a bufsize that makes you happy (8192 has been suggested).
$bufsize = 8192;
$buff = '';
while( !feof($fp) ) {
   $buff = fread($fp, $bufsize);
   echo $buff;
}
pclose($fp);

这就是我用来称呼它的东西:

$(document).ready(function() {
    $("#download_button").click(function() {
        $.get("../php/ZipAndDownload.php", function(data){alert(data)});
        return false;
    });
});

我也尝试过:

$(document).ready(function() {
        $("#download_button").click(function() {
            $.ajax({
                url:url,
                type:"GET",
                complete: function (response) {
                    $('#output').html(response.responseText);
                },
                error: function () {
                    $('#output').html('Bummer: there was an error!');
                }
            });
            return false;
        });
    });

现在,每当我单击下载按钮时,都会得到“正在启动zip测试”的回显,而没有其他任何回声。没有错误,也没有zip文件。我需要知道什么或者我在做什么显然是错误的?

预先感谢您的帮助和建议。

编辑:这是我根据德里克(Derek)的一些建议后得到的。这仍然会产生很大的二进制二进制字符串。

<?php
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="file.zip"');

require "./aws.phar";
use Aws\S3\S3Client;

$bucket = 'myBucket';

$client = S3Client::factory(array(
    'key'    => getenv('AWS_ACCESS_KEY_ID'),
    'secret' => getenv('AWS_SECRET_KEY')
));

$result = $client->getObject(array(
    'Bucket' => $bucket,
    'Key'    => 'test.txt',
    'SaveAs' => '/tmp/test.txt'
));

$Uri = $result['Body']->getUri();

$fp = popen('zip -r - '.$Uri, 'r');

$bufsize = 8192;
$buff = '';
while( !feof($fp) ) {
   $buff = fread($fp, $bufsize);
   echo $buff;
}
pclose($fp);
?>
德里克·库斯(Derek Kurth)

马克·B的评论是正确的。对zip的调用不知道s3://的含义。

您将需要从S3下载文件,然后在本地将其压缩。您可以从S3下载文件的几种方法。例如,您可以使用:

$client->getObjectUrl($bucket, $key) 

获取对象的URL,然后使用cUrl或wget从该URL下载,具体取决于您的权限设置。

将文件保存到本地后,请使用保存文件的位置更新zip命令,以生成.zip文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用wget从S3存储桶下载文件?

来自分类Dev

使用Laravel从Amazon S3下载文件

来自分类Dev

AWS S3:使用“ response-content-disposition”强制下载文件

来自分类Dev

使用PHP SDK在Amazon S3上上传文件

来自分类Dev

仅当远程文件比本地副本新时,才如何使用Boto从S3下载文件?

来自分类Dev

Amazon S3文件从Android下载

来自分类Dev

使用AFAmazonS3Client从Amazon S3下载的损坏的文件

来自分类Dev

使用S3 TransferutilityUploadRequest无法对文件进行压缩

来自分类Dev

Amazon S3压缩文件?

来自分类Dev

使用Amazon Android API下载文件

来自分类Dev

如何在Python中使用临时令牌从s3存储桶下载文件

来自分类Dev

使用Python在未经身份验证的公共S3存储桶上下载文件

来自分类Dev

使用boto3从S3存储桶下载文件时出现ValueError吗?

来自分类Dev

如何使用Boto3创建预签名URL以从S3存储桶下载文件?

来自分类Dev

如何在不使用AWS CLI的情况下使用S3专用存储桶下载文件

来自分类Dev

我是否需要检查完整性,使用熊猫从s3上传和下载文件?

来自分类Dev

使用PHP从Amazon S3下载文件后继续执行

来自分类Dev

如何生成安全的临时URL以从Amazon S3下载文件?

来自分类Dev

使用php压缩并下载文件

来自分类Dev

使用PHP SDK在Amazon S3上上传文件

来自分类Dev

Amazon S3文件从Android下载

来自分类Dev

使用AFAmazonS3Client从Amazon S3下载的损坏的文件

来自分类Dev

通过Carrierwave和Fog从Amazon S3下载文件

来自分类Dev

使用Laravel 5.1从云磁盘(S3)下载文件

来自分类Dev

使用Amazon Android API下载文件

来自分类Dev

通过代理服务器使用Boto从s3下载文件

来自分类Dev

使用 .net SDK 从 Amazon S3 存储桶下载文件夹

来自分类Dev

在 Laravel 中压缩和下载 Amazon S3 存储桶文件和文件夹

来自分类Dev

有没有一种方法可以使用 Android AWS SDK 从 Amazon S3 存储桶中读取文件上下文而无需下载文件?

Related 相关文章

  1. 1

    如何使用wget从S3存储桶下载文件?

  2. 2

    使用Laravel从Amazon S3下载文件

  3. 3

    AWS S3:使用“ response-content-disposition”强制下载文件

  4. 4

    使用PHP SDK在Amazon S3上上传文件

  5. 5

    仅当远程文件比本地副本新时,才如何使用Boto从S3下载文件?

  6. 6

    Amazon S3文件从Android下载

  7. 7

    使用AFAmazonS3Client从Amazon S3下载的损坏的文件

  8. 8

    使用S3 TransferutilityUploadRequest无法对文件进行压缩

  9. 9

    Amazon S3压缩文件?

  10. 10

    使用Amazon Android API下载文件

  11. 11

    如何在Python中使用临时令牌从s3存储桶下载文件

  12. 12

    使用Python在未经身份验证的公共S3存储桶上下载文件

  13. 13

    使用boto3从S3存储桶下载文件时出现ValueError吗?

  14. 14

    如何使用Boto3创建预签名URL以从S3存储桶下载文件?

  15. 15

    如何在不使用AWS CLI的情况下使用S3专用存储桶下载文件

  16. 16

    我是否需要检查完整性,使用熊猫从s3上传和下载文件?

  17. 17

    使用PHP从Amazon S3下载文件后继续执行

  18. 18

    如何生成安全的临时URL以从Amazon S3下载文件?

  19. 19

    使用php压缩并下载文件

  20. 20

    使用PHP SDK在Amazon S3上上传文件

  21. 21

    Amazon S3文件从Android下载

  22. 22

    使用AFAmazonS3Client从Amazon S3下载的损坏的文件

  23. 23

    通过Carrierwave和Fog从Amazon S3下载文件

  24. 24

    使用Laravel 5.1从云磁盘(S3)下载文件

  25. 25

    使用Amazon Android API下载文件

  26. 26

    通过代理服务器使用Boto从s3下载文件

  27. 27

    使用 .net SDK 从 Amazon S3 存储桶下载文件夹

  28. 28

    在 Laravel 中压缩和下载 Amazon S3 存储桶文件和文件夹

  29. 29

    有没有一种方法可以使用 Android AWS SDK 从 Amazon S3 存储桶中读取文件上下文而无需下载文件?

热门标签

归档