Laravel拒绝通过URL直接访问文件,但是登录后是否允许下载?

时间:2018-11-14 04:55:42

标签: php laravel apache laravel-5

我正在使用Laravel 5.3,apache和php 5.6,我需要拒绝通过url直接访问文件,但是我需要在用户通过url或通用php登录后下载那些文件,以下载文件,我没有使用Auth,而是使用自己的登录过程。首先可以这样做吗?
  我已将文件保存在

  

project / public / uploads / {clientid} /sample.txt

我知道将文件存储在公用文件夹中而不是将其存储在存储文件夹中是一种不好的做法,但是该项目最初是以这种方式开发的,我们需要克服对文件的直接访问,无论如何都可以这样做,我通过在公共文件夹中编辑.htaccess进行了尝试,

<IfModule mod_rewrite.c>
RewriteEngine on
Order Deny,Allow
Deny from all
Allow from 127.0.0.1    
<Files /../index.php>
    Order Allow,Deny
    Allow from all
</Files>
<FilesMatch ".*\.(css|js)$">
    Order Allow,Deny
    Allow from all
</FilesMatch>
</IfModule>

无论如何,这仅允许将css和js文件存储在公用文件夹中,但是会拒绝通过url和php常规下载后保留在公用文件夹中的所有其他文件。

1 个答案:

答案 0 :(得分:1)

Laravel有更好的解决方案 您将文件保存到存储 您可以下载它

return response()->download($file);

您的文件是存储中文件的绝对传递 您可以管理可以下载,不能下载和安全的用户

因此,执行此操作后,将创建一条这样的路由:

Route::get('download/{file}',function($file){
return response()->download(storage_path($file));
});

您可以使用路由做任何事情,例如为auth用户或...添加中间件。

相关问题