【问题标题】:Unzipping uploaded file, using zip_read, in Google App Engine (GAE)在 Google App Engine (GAE) 中使用 zip_read 解压缩上传的文件
【发布时间】:2014-07-30 22:43:21
【问题描述】:

据我所知,对于用户上传的文件,必须由 CloudStorageTools::createUploadUrl() 将文件上传到 PHP GAE 环境,从而在 gs 存储桶中生成一个文件 (gs://[name]/[id ])。

文件上传是一种魅力,但解压缩上传的文件会带来一些问题。 我尝试了 3 种方法,但似乎都不适合我:

  1. 支持 PHP zip 函数 (http://www.php.net/manual/en/ref.zip.php),但在 gs 存储桶路径上使用 zip_open 不起作用(检查 fopen 命令导致工作文件指针:资源 id #120)

  2. ZipArchive (http://nl1.php.net/manual/en/book.zip.php)。不幸的是,GAE 不(还?)支持 ZipArchive 库。必须编译。

  3. PclZip (http://www.phpconcept.net/pclzip) 为我提供了有效的追索句柄(支持 zlib),但我遇到了这个问题(fseek 经常为 0):https://code.google.com/p/googleappengine/issues/detail?id=10881

有人知道如何将大型 zip 文件上传到 GAE (PHP)、解压缩并使用它们吗? 我几乎到了要求用户自己解压缩 zip、分别上传解压缩的文件并绕过整个解压缩过程的地步。

【问题讨论】:

  • 我也有同样的问题!

标签: php google-app-engine file-upload unzip


【解决方案1】:

我知道这已经有一段时间了,但我也尝试了上述方法,但没有奏效。我正要和GAE认输,然后发现TbsZip

有了它,我可以上传一个 ODT(它是一个 zip 格式),提取一个文件,修改它,然后把它塞回原始 zip 的副本中,然后发回给用户。尚未对其进行广泛测试,但在 Google 修复 GAE 之前,它似乎是一个合理的解决方法。

API 类似于 ZipArchive。我将它与当前的 GAE SDK (1.9.15) 一起使用。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    哇,在 GAE 和 gcloud 存储上处理大型 zip 文件似乎让很多人感到悲痛。

    长话短说,no php 方法将解压存储桶中的文件。 Witness... 您可以将文件上传到您的 GAE 实例的 /tmp 文件夹,然后使用流将其内容提取到存储桶中。

    $temp = '/tmp/source.zip';
    $zip = new ZipArchive;
        $res = $zip->open($temp);
        if ($res === TRUE) {
            $fp = $zip->getStream('somefile.csv');
            $target = fopen('gs://foo.com/target.csv,  'w');
            stream_copy_to_stream($fp, $target);
            fclose($fp);
            fclose($target);
            $zip->close();
            unlink($temp);
    
        } else {
            $this->log->error('Could not unzip the hotels file');
        }
    

    这并不理想,因为 /tmp 文件夹中的存储是从您的实例内存中分割出来的。因此,您需要指定一个足够大的实例类型,以将源 zip 文件连同您的应用程序一起放入内存中。

    在我的例子中,我的源大约是 150MB,提取大小为 2.8GB。我能够使用 256MB 的标准 F2/B2 实例处理我的上传。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多