我正在尝试在我的代码中实现 * 下载所有文件 * 功能。我已经参考了stackoverflow中的一些链接来实现这一点。然而,我仍然在努力实现这一点,下面是下载控制器,
public function downloadDocuments($id)
{
$documents = DB::table('product_documents')->where('id', $id)->first();
$path2 = $documents->file_path;
$files = array(Storage::url($path2));
$zip = new ZipArchive();
$zip_name = time() . "documents.zip"; // Zip name
$zip->open($zip_name, ZipArchive::CREATE);
foreach ($files as $file) {
echo $path = "public/Product/Documents/" . $file;
if (file_exists($path)) {
$zip->addFromString(basename($path), file_get_contents($path));
} else {
echo "file does not exist";
}
}
$zip->close();
}
这里是 * 下载 * 的 * 按钮 * 和 * 路线 *,
x一个一个一个一个x一个一个二个x
下面是存储所有文档/图像时的控制器。为了实验,我只想下载多个文档文件。我试了一次又一次,但它总是失败。请告诉我如何解决这个问题?谢谢
public function store(Request $request)
{
$data = $this->validate($request, [
'name' => 'required',
'description' => 'required|max:150',
'category_id' => 'required',
'type_id' => 'required',
'price' => 'required|numeric|min:0|not_in:0',
'start_date' => 'required',
'end_date' => 'required',
'is_active' => 'required',
'images.*' => 'image|max:2048', // max file size: 2MB
'documents.*' => 'file|max:2048', // max file size: 2MB
]);
$product = DB::table('products')
->insertGetId([
'name' => $data['name'],
'description' => $data['description'],
'type_id' => $data['type_id'],
'category_id' => $data['category_id'],
'price' => $data['price'],
'start_date' => $data['start_date'],
'end_date' => $data['end_date'],
'is_password' => $request['is_password'],
'is_stamping' => $request['is_stamping'],
'created_at' => now(),
]);
// handle image uploads
if ($request->hasFile('images')) {
$i = 1;
foreach ($request->file('images') as $image) {
$name = $request['name'] . '-' . $i;
$now = new DateTime();
$fileName = Str::slug($request['name']) . '-' . $now->format('dmYHis') . '-' . $i . '.' . $image->getClientOriginalExtension();
//$fileName = Str::slug($request['name']) . '-' . time() . '.' . $image->getClientOriginalExtension();
$path = $image->storeAs('public/Product/Images', $fileName);
DB::table('product_images')->insert([
'product_id' => $product,
'name' => $name,
'file_path' => Storage::url($path),
'created_at' => now(),
]);
$i++;
}
}
// handle document uploads
if ($request->hasFile('documents')) {
$i = 1;
foreach ($request->file('documents') as $document) {
$name = $request['name'] . '-' . $i;
$now = new DateTime();
$fileName = Str::slug($request['name']) . '-' . $now->format('dmYHis') . '-' . $i . '.' . $document->getClientOriginalExtension();
//$fileName = Str::slug($request['name']) . '-' . time() . '.' . $document->getClientOriginalExtension();
$path = $document->storeAs('public/Product/Documents', $fileName);
DB::table('product_documents')->insert([
'product_id' => $product,
'name' => $name,
'file_path' => Storage::url($path),
'created_at' => now(),
]);
$i++;
}
}
$now = Carbon::now();
$month = $now->format('m');
$year = $now->format('Y');
DB::table('log_audits')->insert([
'module_name' => 'Jualan',
'description' => 'Simpan Produk ' . $data['name'],
'user_id' => auth()->user()->id,
'created_at' => $now,
'month' => $month,
'year' => $year,
]);
return Redirect::route('produk.index');
}
一开始,我尝试实现Zipper/Chumper方法,但它不起作用,因为这个Web应用程序运行在laravel 7上,而不是laravel 5。所以后来我做了一些研究,发现我可以使用ZipArchive
。在编写代码并尝试运行它之后。我得到了404错误。我确信我可能在代码中遗漏了一些东西,或者可能我编写并引用了错误的东西。请帮帮忙
1条答案
按热度按时间uqjltbpv1#
我认为你的代码中有很多问题。
首先,
<Link>
组件不接受路由名称,而是接受路径。要使用路由名称,您需要使用ziggyroute()
帮助程序。您可以尝试:
或
其次,目前你的
downloadDocuments($id)
函数需要一个你没有设置的id(你不需要下载所有的文档)。