如何使用Laravel Framwork保存和显示PDF,Excel和Word文件?

时间:2016-01-25 06:55:20

标签: php laravel file-upload

当我保存时,我会收到此错误

  

未定义的变量:文件

我真的不知道如何存储文件,但我在谷歌检查了一些博客,这是我的商店功能:

public function store(Request $request)
    {
        $this->validate($request, $this->rules);
        if($request->hasFile('file')){
            $file = $request->file('file');
            $path = $file->getRealPath();
            $files = file_get_contents($path);
        }
        $input = $request->all();
        $charge = $request->get('charge');
        $date = $request->get('date');
        $job = $request->get('job_id');
        $id = \Auth::id();
        $current_id = DB::table('charges')->max('invoice_no');
        $data = array();
        foreach ($charge as $key=>$value ){
            $data[] = [
                'date' => $date,
                'charge'=>$value,
                'job_id'=>$job,
                'user_id'=>$id,
                'amount'=>$input['amount'][$key],
                'category'=>$input['category'][$key],
                'file'=>$files[$key], // here i will get error
                'invoice_no' => $current_id + 1,
            ];
        }

我正在创建我们的公司应用程序,因此我们将托管云。我很困惑将这些文件存储在我的数据库或磁盘中,但我们必须访问这些文件。在我的节目视图中,我希望使用名称显示此文件,当我点击该名称时,我希望显示该特定文档的可能性如何?

EDIT 这是我的表格

 {!! Form::model(new App\Charge, ['route' => ['charges.store'],'class'=>'form-horizontal','role'=>'form']) !!}

    <div class="form-group">
        {!! Form::label('date', 'DATE :',['class'=>'col-md-2 control-label']) !!}
        <div class="col-md-7">
            {!! Form::date('date',\Carbon\Carbon::now(),null,['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="form-group">
        {!! Form::label('job_id', 'JOB ID :',['class'=>'col-md-2 control-label']) !!}
        <div class="col-md-7">
            {!! Form::select('job_id',$job,null,['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="form-group">
        {!! Form::label('charges', 'CHARGES :',['class'=>'col-md-2 control-label']) !!}
        <div class="col-md-10">
            <div class="input_fields_wrap">
                <button class="add_field_button" value="">Add More Charges</button>
                <div>
                    <input type="text" name="charge[]">
                    <input type="text" name="category[]">
                    <input type="text" name="amount[]">
                    <input type="file" name="file[]">
                </div>
            </div>
        </div>
    </div>


    <div class="form-group">
        <div class="col-md-2 col-md-offset-8">
            <submitfiled>
                {!! Form::submit(['class'=> 'btn btn-primary form-control']) !!}
            </submitfiled>
        </div>
    </div>
 {!! Form::close() !!}

2 个答案:

答案 0 :(得分:1)

您正在尝试访问仅在上传文件时设置的$files变量:

if($request->hasFile('file')){
    $file = $request->file('file');
    $path = $file->getRealPath();
    $files = file_get_contents($path);
}

因此,您可能无法上传文件。检查您的表单是否有enctype="multipart/form-data"。还要确保您通过在第2行上使用以下方式检查文件来上传文件:

dd($request->file('file'));

我们假设文件上传工作正常,您将整个文件读成string file_get_contents()并将其分配给$files

但是在代码的后面,您认为$filesarray

'file'=>$files[$key], // here i will get error

尝试调试您的变量以查看其中的实际内容。

此外,我会将文件复制到上传目录,只保存此文件的路径,而不是将整个文件保存为字符串。

答案 1 :(得分:0)

我发现你上传时遇到问题,但你已经到了那里,对吗?

存储后,您将拥有一个带有参数的路径,该路径可以流式传输或下载相关文件。

同时检查

https://github.com/barryvdh/laravel-dompdf

https://github.com/PHPOffice

你会找到很棒的方式