如何通过URL地址从存储中打开文件?

时间:2017-10-17 20:27:14

标签: laravel laravel-5.5

我将文件存储在存储中。

不,我尝试生成打开文件的链接,如:

<link href="resources/static/css/bootstrap.min.css" rel="stylesheet" media="screen">

<link href="css/bootstrap.min.css" rel="stylesheet">

<link href="../css/bootstrap.min.css" rel="stylesheet">

但它不起作用。

如何通过URL地址从存储中打开文件?

3 个答案:

答案 0 :(得分:4)

默认情况下,网址无法访问存储中的文件

您可以使用Public Disk。为此,您需要创建从public/storagestorage/app/public

的符号链接

从Larvel 5.3及以上版本,您可以使用artisan命令来帮助您创建符号链接

php artisan storage:link

如果您使用的是旧版本的Laravel,您可以找到如何创建符号链接的答案here

另一种方法是通过编辑文件config/filesystems.php来创建新磁盘&#34;上传&#34;

'disks' => [
    'local' => [
        'driver' => 'local',
        'root'   => storage_path(),
    ],
    'uploads' => [
        'driver' => 'local',
        'root'   => public_path() . '/uploads',
    ],
]

将文件存储在此位置

Storage::disk('uploads')->put($file_name, $file_content);

并获取文件

asset('uploads/'. $file_name)

答案 1 :(得分:1)

storage目录存在于Web根目录之外,因为其中的某些内容不一定是可公开访问的。

https://laravel.com/docs/5.5/filesystem#the-public-disk

  

公用磁盘适用于可公开访问的文件。默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在storage/app/public中。要通过网络访问它们,您应创建从public/storagestorage/app/public的符号链接。此约定将使您可公开访问的文件保存在一个目录中,当使用零件停机时间部署系统(如Envoyer)时,可以在部署中轻松共享这些文件。

答案 2 :(得分:0)

我强烈建议不要修改Laravel的目录结构。

我要做的是创建一个下载文件的URL,例如:

Route::get('download/{file}', 'DownloadsController@index');

在该方法的控制器中,放置一些逻辑来声明该文件存在并通过响应下载来提供它,例如

public function index($file)
{
    $filePath = storage_path('tests/'.$file);
    if (! file_exists($filePath)) {
        // Some response with error message...
    }

    return response()->download($filePath);
}

然后你可以用这样的链接下载你的文件

http://[temp.com]/download/de139607636857fade861a3c2c472643.txt

控制器的方式允许您在提供文件之前进行一些身份验证检查,或者计算文件下载次数。