Zend Framework 3:为生成的文件创建下载 link
Zend Framework 3: create download link for generated file
我正在编写一个允许用户上传 Excel 文件的应用程序。它检查文件是否有错误,然后,如果没有发现错误,它会将内容上传到数据库。如果确实发现错误,则包含错误的单元格会显示为红色,然后保存文件。然后我想创建一个下载 link 到这个文件,这样用户就可以检查他们在哪里犯了错误。
问题是我不确定如何创建此 link 以及将文件存储在何处。我这样修改文件:
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);
}
}
这是正确的方法吗?我可以将文件存储在任何旧文件夹中,还是它们已转到特定位置?如何在视图中为用户创建特定文件的 link 并使其可访问以便他们可以下载?
我可能错了。
对于文件上传,我使用这个库Gargron/fileupload
下面的函数有助于将文件上传到特定文件夹和 return 完整 link 文件。您可以将 link 保存在 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()) ;
}
}
}
感谢您的帮助,我设法在周末解决了这个问题。这是我的做法
它:
$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() 获取所述文件名并将其传递给视图模型。
<a href="<?php echo $this->filename; ?>">Right-click here and choose 'Save As' to download your file.</a>
最后,这是它在 reject.phtml 中显示 link 的方式。
下载仅适用于右键单击并另存为,我怀疑我必须编写某种文件处理程序才能使 ZF 为正常的左键单击下载生成正确的 headers。
我正在编写一个允许用户上传 Excel 文件的应用程序。它检查文件是否有错误,然后,如果没有发现错误,它会将内容上传到数据库。如果确实发现错误,则包含错误的单元格会显示为红色,然后保存文件。然后我想创建一个下载 link 到这个文件,这样用户就可以检查他们在哪里犯了错误。 问题是我不确定如何创建此 link 以及将文件存储在何处。我这样修改文件:
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);
}
}
这是正确的方法吗?我可以将文件存储在任何旧文件夹中,还是它们已转到特定位置?如何在视图中为用户创建特定文件的 link 并使其可访问以便他们可以下载?
我可能错了。
对于文件上传,我使用这个库Gargron/fileupload 下面的函数有助于将文件上传到特定文件夹和 return 完整 link 文件。您可以将 link 保存在 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()) ;
}
}
}
感谢您的帮助,我设法在周末解决了这个问题。这是我的做法 它:
$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() 获取所述文件名并将其传递给视图模型。
<a href="<?php echo $this->filename; ?>">Right-click here and choose 'Save As' to download your file.</a>
最后,这是它在 reject.phtml 中显示 link 的方式。 下载仅适用于右键单击并另存为,我怀疑我必须编写某种文件处理程序才能使 ZF 为正常的左键单击下载生成正确的 headers。