首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建和下载Zip文件(maennchen/ZipStream-PHP)

创建和下载Zip文件(maennchen/ZipStream-PHP)
EN

Stack Overflow用户
提问于 2020-01-03 18:55:25
回答 1查看 964关注 0票数 1

在我的项目中,我们使用了maennchen/ZipStream-PHP包。现在我正在尝试创建和下载zip文件,但是当我打开zip文件时,我得到一个错误消息"empty archive“。

代码语言:javascript
复制
return new StreamedResponse(function() use ($filenames, $logger) {
        $filename = 'example.zip';

        $opt = new ArchiveOptions();
        $opt->setContentDisposition("attachment;filename=\"$filename\"");
        $opt->setContentType('application/octet-stream');
        $opt->setEnableZip64(false);
        $opt->setFlushOutput(true);
        $opt->setSendHttpHeaders(true);

        $zip = new ZipStream($filename, $opt);

        foreach ($filenames as $f) {
            if (true === file_exists($f)) {
                try {
                    $zip->addFileFromPath(basename($f), $f);
                } catch (\Exception $exception) {
                    $logger->error($exception->getMessage());
                }
            } else {
                $logger->error(sprintf('File %s does not exist.', $f));
            }
        }

        $zip->finish();
    });

如果我转储$zip,则文件参数为空。我认为addFile方法不起作用。

你能帮帮我吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 02:34:31

Symfony的StreamedResponse已经在发送报头了,所以你不应该在“流”中覆盖它们。

试试这个;

代码语言:javascript
复制
return new StreamedResponse(function() use ($filenames, $logger) {
        $opt = new \ZipStream\Option\Archive();
        $opt->setZeroHeader(true);
        $opt->setEnableZip64(false);

        $zip = new ZipStream(null, $opt);

        foreach ($filenames as $f) {
            if (true === file_exists($f)) {
                try {
                    $zip->addFileFromPath(basename($f), $f);
                } catch (\Exception $exception) {
                    $logger->error($exception->getMessage());
                }
            } else {
                $logger->error(sprintf('File %s does not exist.', $f));
            }
        }

        $zip->finish();
    },
    200,
    [
        'Content-Disposition' => 'attachment;filename="example.zip"',
        'Content-Type' => 'application/octet-stream',
    ]);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59577304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档