【问题标题】:Saving files locally with Laravel使用 Laravel 在本地保存文件
【发布时间】:2018-04-20 18:07:36
【问题描述】:

我在 Laravel 中本地保存文件,但是在获取正确的 URL 和访问文件时遇到问题。

我已经用 Artisan 设置了一个符号链接:

php artisan storage:link 

保存的时候,我在名字后面加了public/,这样文件就放在/storage/app/public/目录下,这样就可以了。

if ($request->hasFile('files')) {
    $files = array();

    foreach ($request->file('files') as $file) {
        if ($file->isValid()) {
            $name = time() . str_random(5) . '.' . $file->getClientOriginalExtension();
            Storage::disk('public')->put($name, $file);
            $files[] = $name;
        }
    }

    if (count($files) > 0) {
        $response->assets = json_encode($files);
    }
}

名称存储在数据库中

["1524042807kdvws.pdf"]

然后资产通过我的 Vue API 作为 JSON 对象的一部分返回

if (count($response->assets) > 0) {
    $assets = array();
    foreach (json_decode($response->assets, true) as $asset) {
        $assets[] = asset($asset);
    }
    $responses[$key]->assets = $assets;
}

返回 http://127.0.0.1:8000/1524042807kdvws.pdf 但返回 404。我觉得我有点困惑,所以任何指点或帮助都将不胜感激。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    所以我在another post找到了我的答案

    我需要将$file 包裹在file_get_contents() 中;

    Storage::disk('public')->put($name, $file);
    

    我用的是asset()而不是:

    Storage::disk('public')->url($asset['file']);
    

    【讨论】:

      【解决方案2】:

      查看此文档。 https://laravel.com/docs/5.5/filesystem#the-public-disk

      因为它在那里显示而不是

      $name = 'public/' . time() . str_random(5) . '.' . $file->getClientOriginalExtension();
      

      你可以拥有

      $name = 'time() . str_random(5) . '.' . $file->getClientOriginalExtension();
      Storage::disk("public")->put($name, $file); // assuming you have the public disk that comes by default
      

      那么当你想获取一个url时,可以使用asset函数

      asset('storage/foo.txt');
      

      【讨论】:

      • 谢谢,是的,我已经浏览了文档。所以我更新了我的问题以使用disk('public'),它将它保存在正确的位置。我已经在使用asset() 来检索文件但仍然是 404ing
      • 文件存放在系统中的正确路径?如果它在'public'下asset('foo.txt');应该得到它..
      • 可以直接在浏览器中使用url访问任何文件吗?
      • 是的,所以它在 /storage/app/public/1524042807kdvws.pdf 中,但就像我说的 asset() 函数返回 http://127.0.0.1:8000/1524042807kdvws.pdf,这只是我的 404。
      • http://127.0.0.1:8000/storage/1524042807kdvws.pdf 是否返回文件?
      猜你喜欢
      • 2016-10-30
      • 1970-01-01
      • 2020-09-06
      • 2011-05-11
      • 2017-11-19
      • 2016-06-30
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多