Laravel下载不起作用

时间:2017-04-11 13:18:26

标签: laravel download

在我的申请中,我需要:

  1. 上传文件
  2. 将信息存储在db
  3. 将文件存储在本地或远程文件系统中
  4. 列出所有数据库行以及下载文件的链接
  5. 从数据库和文件系统中删除文件
  6. 我正在尝试开发第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;
    

    ' EM> 此外,我可以避免硬编码和使用

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

    这样下载方法可以使用

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

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

    另外我想要远程存储文件(可能是本地临时目录和文件?)

1 个答案:

答案 0 :(得分:0)

前段时间我做了类似的事情。也许这个示例代码可以帮助您。

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();
    }
}