【问题标题】:Laravel download not workingLaravel 下载不工作
【发布时间】:2017-09-06 21:52:30
【问题描述】:

在我的应用程序中,我需要:

  1. 上传文件
  2. 在数据库中存储信息
  3. 将文件存储在本地或远程文件系统中
  4. 列出所有数据库行以及下载文件的链接
  5. 从数据库和文件系统中删除文件

我正在尝试开发第 4 个,但找到的解决方案 herehere 对我不起作用。

我的 filesystem.php 是:

'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'visibility' => 'public',
    ],

    'myftpsite' => [
        'driver'   => 'ftp',
        'host'     => 'myhost',
        'username' => 'ftpuser,
        'password' => 'ftppwd',

        // Optional FTP Settings...
        // 'port'     => 21,
         'root'     => '/WRK/FILE/TEST',
        // 'passive'  => true,
        // 'ssl'      => true,
        // 'timeout'  => 30,
    ],

Controller 中,我将文件存储为:

    ... validation here ...
    $path = $request->uploadfile->storeAs('', $request->uploadfile->getClientOriginalName(), self::STORAGEDISK);
    $file = new TESTFile;
    ... db code here ...
    $file->save();

此时我想检索变量以传递给下载方法(我的文件的 url 或路径)。我找到了两种方法

  • Storage::url($pspfile->filename) *return* **/storage/** accept.png
  • Storage::disk(self::STORAGEDISK)->getDriver()->getAdapter()->applyPathPrefix($pspfile->filename) *return* C:\xampp\htdocs\myLaravel\ **storage** \app\accept.png

非常感谢您以更好的方式提供帮助或建议。

编辑 目前我将本地/公共与 FTP 分开。 如果在Controller我修改了,下载就可以了

$path = $request->uploadfile->storeAs('',
          $request->uploadfile->getClientOriginalName()
          ,self::STORAGEDISK);
$file->fullpath = $path;

$file->fullpath = storage_path('app\\') . $path;

其中 'app\'filesystem.php 中配置为 rootstorage_path 此外,我可以避免硬编码和使用

$file->fullpath = Storage::disk(self::STORAGEDISK) ->getDriver() ->getAdapter() ->getPathPrefix() . $path;

这样下载方式就可以使用了

return response()->download($pspfile->fullpath);

我仍在寻找一种方法来检索 img 标记的有效 scr 属性。

此外,我希望远程存储的文件也一样(可能是本地临时目录和文件?)

【问题讨论】:

    标签: laravel download


    【解决方案1】:

    我前段时间做了类似的东西。也许这个示例代码对你有帮助。

    class FileController extends Controller
    {
        // ... other functions ...
    
        public function download(File $file)
        {
            if (Storage::disk('public')->exists($file->path)) {
                return response()->download(public_path('storage/' . $file->path), $file->name);
            } else {
                return back();
            }
        }
    
        public function upload()
        {
            $this->validate(request(), [
                'file-upload' => 'required|file',
            ]);
    
            $path = request()->file('file-upload')->store('uploads', 'public');
            $file = new File;
            $file->name = request()->file('file-upload')->getClientOriginalName();
            $file->path = $path;
            $file->save();
    
            return back();
        }
    }
    

    【讨论】:

    • 上传 我使用 storeAs 而不是使用商店。而不是 public 我从本地切换(仅用于基本测试)到 FTP。如您所见,我将 目录名称 留空,以便存储在 filesystem.php 中配置的远程目录中,或者用于将文件存储在 storage/app 中的本地磁盘。在这两种方式中,文件都按预期存储。 db中存储的路径与文件名相同。 Storage 外观的 get 方法也有效,但我不明白我是否需要下载它,或者我是否只需要 path () 以及是否可以使用相同的路径作为 img 标签中的 src 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多