Laravel 5 zipArchive 到存储与到 public
Laravel 5 zipArchive to Storage vs to public
在我的Larevel 应用程序中,我想将一些文件放在一个zip 文件中供客户端下载。我不想将 zip 放在 public 文件夹中。
所以我在我的“/storage”文件夹中创建了一个 "tobedownload" 文件夹,并计划将 zip 文件放在那里。但我得到了糟糕的错误:
"ZipArchive::close(): Failure to create temporary file: No such file or directory"
我的示例代码是这样的:(比如,需要压缩的文件是public文件夹中的"whatever.PNG"。不用担心,我不会使用这个位置的文件在实际实现中。示例存档文件名为 "AllDocuments.zip",位于 storage/tobedownload 文件夹下)。
public 函数 downloadzip(){
Storage::makeDirectory('tobedownload',$mode=0775);
$path=storage_path('tobedownload');
$public_dir=public_path();
$zipFileName = 'AllDocuments.zip';
$zip=new ZipArchive();
if ($zip->open( $path. '/' .$zipFileName, ZipArchive::CREATE))
{
$zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
$zip->close();
}
}
但是,如果我将新的 zip 文件放在 public 文件夹中,我就可以创建 zip。以下示例代码有效。
public 函数 downloadzip(){
//如果我将存档放在 public 文件夹
中,似乎一切正常
$public_dir=public_path();
$zipFileName = 'AllDocuments.zip';
$zip=new ZipArchive();
if ($zip->open( $public_dir. '/' .$zipFileName, ZipArchive::CREATE))
{
$zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
$zip->close();
}
}
我怀疑这是权限问题,但我已经设置了存储 0755。感谢您的帮助...我在 Laravel 5.6。
OK.I 我想我明白了。文件夹错了。当您在存储上创建目录时。 Storage::disk('local')->makeDirectory('yourfolder')
您创建的文件夹位于 /storage/app/yourfolder
而不是 /storage/yourfolder
。
因此,在我之前的代码中,将 $path=storage_path('tobedownload');
更改为 $path=storage_path('app/tobedownload');
即可。
在我的Larevel 应用程序中,我想将一些文件放在一个zip 文件中供客户端下载。我不想将 zip 放在 public 文件夹中。 所以我在我的“/storage”文件夹中创建了一个 "tobedownload" 文件夹,并计划将 zip 文件放在那里。但我得到了糟糕的错误:
"ZipArchive::close(): Failure to create temporary file: No such file or directory"
我的示例代码是这样的:(比如,需要压缩的文件是public文件夹中的"whatever.PNG"。不用担心,我不会使用这个位置的文件在实际实现中。示例存档文件名为 "AllDocuments.zip",位于 storage/tobedownload 文件夹下)。
public 函数 downloadzip(){
Storage::makeDirectory('tobedownload',$mode=0775);
$path=storage_path('tobedownload');
$public_dir=public_path();
$zipFileName = 'AllDocuments.zip';
$zip=new ZipArchive();
if ($zip->open( $path. '/' .$zipFileName, ZipArchive::CREATE))
{
$zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
$zip->close();
}
}
但是,如果我将新的 zip 文件放在 public 文件夹中,我就可以创建 zip。以下示例代码有效。
public 函数 downloadzip(){
//如果我将存档放在 public 文件夹
$public_dir=public_path();
$zipFileName = 'AllDocuments.zip';
$zip=new ZipArchive();
if ($zip->open( $public_dir. '/' .$zipFileName, ZipArchive::CREATE))
{
$zip->addFile($public_dir.'/whatever.PNG' ); //where the file needs to be add to archive
$zip->close();
}
}
我怀疑这是权限问题,但我已经设置了存储 0755。感谢您的帮助...我在 Laravel 5.6。
OK.I 我想我明白了。文件夹错了。当您在存储上创建目录时。 Storage::disk('local')->makeDirectory('yourfolder')
您创建的文件夹位于 /storage/app/yourfolder
而不是 /storage/yourfolder
。
因此,在我之前的代码中,将 $path=storage_path('tobedownload');
更改为 $path=storage_path('app/tobedownload');
即可。