给出目录链接时如何隐藏目录?

时间:2017-05-09 05:34:44

标签: php laravel laravel-5 directory

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

www.abc.com/files/45454553535.zip

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

4 个答案:

答案 0 :(得分:0)

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

尝试按照文档:https://laravel.com/docs/5.4/filesystem

答案 1 :(得分:0)

我不知道这是否会起作用,但会给你一个想法。创建一个像这样的php文件:

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

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

答案 2 :(得分:0)

试试这个。

    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 facade。但是,我之前的回答适用于Laravel 4或5。

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

答案 3 :(得分:0)

您可以创建一个控制器和路线。

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 。 :)

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

祝你好运!