如何从sql数据库中的单个单元格下载多个文件?我用的是laravel 5.5

eeq64g8w  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(324)

我有一个包含员工详细信息的用户行,$image在数据库中存储了多个文件。我想下载每个文件。到目前为止,我只能下载存储在$image中的单个文件
这里是 myview.blade.php ```

{{$employee['image']}}

我的 `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);

}

当我上传多个文件时执行打印功能,它会选择一个文件吗?

Array ( [0] => 1596838646-logo.jpg )

我想下载myview.blade上显示的多个文件。
cnjp1d6j

cnjp1d6j1#

我相信您要求的是使用http协议在同一请求上下载多个文件,这是不可能的,因为答案中解释了这一点:
laravel下载多个文件
我建议做一个客户端函数,可以为每个特定文件多次调用download方法。
e、 g根据你的问题,可能是这样的:
html格式:

<a onclick='return downloadFiles()'>{{$employee['image']}}</a>

js公司:

function downloadFiles(e) {
    e.preventDefault();
    for (img of IMAGES_FROM_THE_BACK) { 
        setTimeout(() => {
            window.open(`/people/employees/download/${img}`);
        }, 300);
    }
});

请注意,您需要将您的图像传递到一个数组或对象,从后端到前端,在那里您有您的html。

chy5wohz

chy5wohz2#

正如上面的subop所说,这是不可能的,因为http不支持多个文件下载。其中一个解决方案是打开每个文件的连接进行下载,但在我看来,更优雅的方法是文件压缩,它拥有所有文件。
php提供了解决方案,它是ziparchive
之后,压缩所有文件,写入tmp目录中的磁盘,并使用文件位置发送流响应。在php关闭连接之后,您可以使用laravel终止中间件/回调并删除该归档文件以刷新磁盘上的空间。
从上面的链接中获取的普通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);

相关问题