Zend Framework 3:为生成的文件

时间:2017-04-21 08:41:38

标签: php phpexcel zend-framework3

我正在编写一个允许用户上传Excel文件的应用。它检查文件是否有错误,然后,如果没有找到错误,它会将内容上传到数据库。如果确实发现错误,则包含错误的单元格将显示为红色,然后保存文件。然后我想创建一个这个文件的下载链接,以便用户可以检查他们在哪里犯错。 问题是我不知道如何创建此链接以及存储文件的位置。我像这样修改文件:

foreach ($badCells as $bcell) {
                $sheet->getStyle($bcell)->applyFromArray(array(
                    'fill' => array(
                        'type' => \PHPExcel_Style_Fill::FILL_SOLID,
                        'color' => array('rgb' => 'FF4444')
                    )
                ));
            }

然后用

保存
$objWriter->save($dldir . $formData['upload']['name']);

$ dldir是用

创建的
$dldir = "/download/";
        if (file_exists($dldir)) {
            if (!is_dir($dldir)) {
                unlink($dldir);
                mkdir($dldir);
            }
        } else {
            if(!is_dir($dldir)) {
                mkdir($dldir);
            }
        }

这甚至是正确的方法吗?我可以将文件存储在任何旧文件夹中,还是将它们放在某个特定的位置?如何在视图中为用户创建指向特定文件的链接并使其可访问以便下载?

2 个答案:

答案 0 :(得分:0)

我可能错了。

对于文件上传,我使用此库Gargron/fileupload 下面的函数有助于将文件上传到特定文件夹并返回文件的完整链接。您可以将链接保存在DB

    function uploadFile ($file){
        $validator = new \FileUpload\Validator\Simple('5M');

        $pathresolver = new \FileUpload\PathResolver\Simple($_SERVER['DOCUMENT_ROOT'].'/upload_folder');

        $filesystem = new \FileUpload\FileSystem\Simple();

        $fileupload = new \FileUpload\FileUpload(file, $_SERVER);

        $fileupload->setPathResolver($pathresolver);
        $fileupload->setFileSystem($filesystem);
        $fileupload->addValidator($validator);
        $md5Generator = new \FileUpload\FileNameGenerator\MD5 (true);
        $fileupload->setFileNameGenerator($md5Generator);

        list($files) = $fileupload->processAll();

        foreach($files as $file){
            if ($file->completed) {
               return $_SERVER['DOCUMENT_ROOT'].'/upload_folder/'.$file->getFileName()) ;
            }
        }
       }

答案 1 :(得分:0)

感谢您的帮助,我设法在周末弄明白了。这就是我的表现 它:

$filename = join(DIRECTORY_SEPARATOR, array($dldir, $formData['upload']['name']));
$objWriter->save(str_replace(__FILE__,$filename,__FILE__));

这是我使用DIRECTORY_SEPARATOR保存文件的方式,因此它可以在Windows和Linux上正常运行。

 return $this->redirect()->toRoute('import', ['action' => 'reject'],['query' => ['q' => 'file', 'name' => $filename]]);

在控制器中,我将路由重定向到正确的操作,并通过查询URL将文件名传递给它。

public function rejectAction()
{
    $filename = $this->getRequest()->getQuery('name', null);
    return new ViewModel(array('filename' => $filename));
}

在那里,我通过getRequest() - > getQuery()获取所述文件名,并将其传递给viewmodel。

<a href="<?php echo $this->filename; ?>">Right-click here and choose 'Save As' to download your file.</a>

最后,这就是它在reject.phtml中显示链接的方式。 下载只能右键单击并另存,因为我怀疑我必须编写某种文件处理程序,以使ZF为正常的左键单击下载生成正确的标题。