php - 如何从 sql 数据库中的单个单元格下载多个文件?我正在使用 laravel 5.5
问题描述
我有一个包含员工详细信息的用户行,并且 $image 有多个文件存储在数据库中。我想下载每个文件。到目前为止,我只能下载存储在 $image 中的单个文件
这是myview.blade.php
<input type="file" name="image[]" class="form-control" value="{{ $employee['image'] }}" multiple>
<a href="{{ url('/people/employees/download/' . $employee['image']) }}">{{$employee['image']}}</a>
我的route.php
Route::get('/people/employees/upload/{id}', 'EmplController@upload');
Route::get('/people/employees/download/{image}', 'EmplController@download');
我的controller.php
public function test(Request $request, $id) {
$employee = User::find($id);
if($request->hasfile('image')){
$files = [];
foreach ($request->image as $image) {
$path = $image->getClientOriginalName();
$filename = time() . '-' . $path;
$files[] = $filename;
$image->storeAs('employees', $employee->id . '/' . $filename);
$image->move(public_path('employees'),$filename);
}
$files = explode(",", $files[0]);
}
$employee->image = $employee->image . $files[0];
$employee->save();
}
public function download($image){
$employee = User::find($image);
$filename = $image;
$filepath = public_path('employees/' . $filename);
return response()->download($filepath);
}
当我在上传多个文件时执行 print_r 函数时,它会选择一个文件?
Array ( [0] => 1596838646-logo.jpg )
我想下载 myview.blade 上显示的多个文件。
解决方案
正如上面的子操作所说,这是不可能的,因为 HTTP 不支持多个文件下载。解决方案之一是打开每个文件的连接以下载,但在我看来,更优雅的是文件压缩,它包含所有文件。
PHP为此提供了解决方案,它是ZipArchive
之后,您压缩所有文件,在 tmp 目录中写入磁盘,并使用您的文件位置发送流响应。php 关闭连接后,您可以使用Laravel Terminate Middleware/Callback并删除该存档以刷新磁盘上的空间。
简单的 PHP 示例取自上面的链接。
$files = array('image.jpeg','text.txt','music.wav');
$zipname = 'enter_any_name_for_the_zipped_file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
///Then download the zipped file.
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
推荐阅读
- android - BiometricPrompt:BiometricFragment 和 Activity 内存泄漏
- java - 悬停时在 JFrame 上增亮图像(JLabel)
- flutter - 我将如何做一个侧面也有文字的侧面导航栏
- helix-3d-toolkit - 如何将 Viewport3DX 渲染为 DX11 纹理?
- php - (PHP) 身份验证帮助
- c# - 使用 Polly 和命名客户端刷新令牌
- c++ - 使用 Qt 模拟 gps 数据以与 traccar 一起使用
- c++ - 如何将成员函数作为参数传递并在派生对象上执行方法列表
- excel - 获取最高数的是excel文件?
- javascript - 如何循环遍历 HTML DOM 节点?