php - 如何将变量从控制器传递到路由文件?
问题描述
我希望我的用户将文件上传到我的 laravel 站点,提交文件,然后能够通过单击另一个页面上的链接来下载相同的文件。我知道如何做所有事情,除了将文件名提供给我的 html 下载链接上指定的路径。
当用户上传文件时,他们的文件由 laravel 使用 storeAs() 命名为 file1.png。下一个上传的文件是file2.png,然后是file3.png,等等。用户按下提交来存储文件并被带到一个页面view.blade.php。在这个 view.blade.php 上,我希望有一个链接,他们可以单击并下载他们刚刚上传的文件。
这是我的 view.blade.php 文件中的代码:
<a href="/downloader">Download a file!</a>
<br>
Pic name = <?= $fileName ?>
这是我的“/downloader”路线:
Route::get('/downloader', function() {
return response()->download('../storage/app/uploads/'.$fileName);
});
从该 html 代码中, $fileName 正确打印文件名,所以我知道 view.blade.php 具有正确的变量。我知道问题是我的路由文件没有收到此变量 $fileName,但我不知道如何将此变量从 view.blade.php 传递到 html 下载链接,以便我的路由也可以具有该变量。
解决方案
这是你如何做到的:
<a href="/downloader/{{ $filename }}"/>
但为了能够使用上面的 $filename 变量,您必须通过 ViewData/ViewBag 传递有关它的信息。
您只需view()->with(["filename" => "thefile.png"]);
在路由或控制器中执行此操作即可。
对于下载路线:
Route::get('/downloader/{filename}', function($filename) {
return response()->download('../storage/app/uploads/'.$filename);
});
PS:这不是最安全的方法 - 强烈建议添加某种形式的验证,可能是文件名之前的字母数字标记。
推荐阅读
- google-cloud-firestore - 如何“将插件迁移到 pubspec 平台清单”
- vue.js - 为什么计算内部的异步会产生无限循环(vue)?
- c# - C# Selenium bot 元素选择麻烦
- visual-studio-2019 - Visual Studio 2019 不使用制表符缩进
- flutter - 如何在堆栈内使文本居中
- java - 我认为我的程序给出的黎曼和结果不准确
- python - 如何将字典元组转换为有组织的数据框?
- amazon-web-services - 如何在 aws 中有多个代码管道触发器?
- java - Android 为什么我在为启动画面膨胀图层列表时出错
- sql - 试图做一个 INSERT INTO 语句