【问题标题】:How to hide directory while giving directory Link?如何在提供目录链接时隐藏目录?
【发布时间】:2017-10-07 07:05:50
【问题描述】:

我已经构建了一个 laravel 应用程序,其中在 public/files 目录中有一些文件。如果我将此链接提供给其他人,例如下载链接,他们就有机会知道我的目录.. 假设我必须将下载链接作为

www.abc.com/files/45454553535.zip

但我不想让用户知道它在文件目录中。那么如何隐藏目录呢?

【问题讨论】:

标签: php laravel laravel-5 directory


【解决方案1】:

你可以创建一个你的控制器和路由。

Route::get('files/{filename}', [
    'as' => 'file.get',
    'uses' => 'FileController@get',
]);

控制器应该检查您的正确目录。尽量将文件保存在存储路径中,而不是公开。

class FileController extends Controller
{
    private $path;

    public function __construct()
    {
        $path = storage_path()
            . '/your-valid-directory/';
    }

    public function get($filename)
    {
        $file_path = $this->path
            . filter_var($filename, FILTER_SANITIZE_STRING);

        if (file_exists($file_path) && is_readable($file_path)) {
            return response(file_get_contents($file_path), 200, [
                'Content-Type: application/zip',
            ]);
        } else {
            abort(404);
        }
    }
}

现在您可以通过以下方式访问特定文件:

{{ route('file.get', ['filename' => '45454553535.zip') }}

此操作生成链接如下所示:your-domain.com/files/45454553535.zip。 :)

无论如何,我认为 - 将来只需使用特定的标题、目录制作文件工厂。

祝你好运!

【讨论】:

    【解决方案2】:

    试试这个。

        public function getDownload()
        {
    $filename='45454553535.zip'
            $file= public_path(). "/files/".$filename;
    
            $headers = array(
                      'Content-Type: application/zip',
                    );
    
            return Response::download($file, $filename, $headers);
        }
    

    “.files/45454553535.zip”将不起作用,因为您必须提供完整的物理路径。

    2016 年 5 月 20 日更新

    Laravel 5、5.1、5.2 或 5.* 用户可以使用以下方法代替 Response 门面。但是,我之前的答案适用于 Laravel 4 或 5。

    返回响应()->下载($file, $filename, $headers);

    【讨论】:

    • 链接是什么?这是关于控制器功能的吧?
    • 你想要什么和文件名,这样你就知道你要下载哪个文件
    【解决方案3】:

    我不知道这是否可行,但给你一个想法。像这样创建一个 php 文件使用:

    header('Content-Type: application/zip');
    $a=file_get_contents(file.zip)
    echo $a;
    

    从此用户将不知道从哪里获取内容。

    【讨论】:

      【解决方案4】:

      将您的文件保存在storage 目录中。这样您就可以通过代码将文件提供给用户。

      尝试遵循文档:https://laravel.com/docs/5.4/filesystem

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 2014-02-12
        • 2021-07-08
        相关资源
        最近更新 更多