【问题标题】:Laravel 5.1 Upload Files SecurityLaravel 5.1 上传文件安全
【发布时间】:2015-12-18 04:04:24
【问题描述】:

如何在我的上传文件中设置安全性,只允许上传 pdf、doc、jpeg、png 和 docx?

我只是在尝试,但我不知道这是否是正确的做法......只是在尝试...... ^_^ 但毕竟它没有起作用^^......实际上我已经出错了。。请帮帮我?

这是我的 Controller.php

public function index()
{
    $entries = Fileentry::where('user_id',Auth::user()->id)->get();
    return view('fileentries.index', compact('entries'));
}

public function store(UploadFiles $request)
{
    if($request->file('filename')) 
    {
        $file = $request->file('filename');

        $filename           = $file->getFilename().'.'.$extension;
        $fileExt            = $file->getClientOriginalExtension();
        $mime               = $file->getClientMimeType();
        $original_filename  = $file->getClientOriginalName();
        $description        = UploadFiles::input('description');
        $user_id            = Auth::user()->id;
        $file->save();

        // Move the file now
        $updatedFileName = $filename.'.'.$fileExt;
        $file->move('path/to/destination/folder', $updatedFileName);

     return redirect('upload');
    }

    else
    {
        echo "nothing happen";
    }
}

这是我的 View.blade.php

@extends('layouts.app')
@section('content')

<form action="{{route('addentry', [])}}" method="post" enctype="multipart/form-data">
    <input name="_token" type="hidden" value="{!! csrf_token() !!}" />
    <input type="file" name="filefield" required>
    <br>

    Description <br>
    <input type="textarea" name="description">
    <br>
    <input type="submit">
</form>
<h1> List of your Entries</h1>

<div class="row">
    <ul class="thumbnails">

@foreach($entries as $entry)

<div class="col-md-2">
    <div class="thumbnail">
         <img src="{{route('getentry', $entry->filename ) }}" alt="ALT NAME" class="img-responsive" /> 

                     <p>{{ $entry->description }} </p>

                     <a href="{{ URL::to('download') }}" download="{{$entry->original_filename}}">{{$entry->original_filename}}</a>

            </div>
        </div>


 @endforeach
 </ul>
 </div>


nI@endsection

先谢谢各位了^^

【问题讨论】:

标签: php mysql database laravel-5.1


【解决方案1】:

通过发出以下命令创建一个FormRequest 对象:

php artisan make:request YourFormRequest

现在,在你的规则方法中:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'filename' => 'mimes:pdf,doc,jpeg,png,docx',
        // and other validation rules...
    ];
}

现在更新你的控制器:

/**
 * Store the form values.
 * Don't forget to import the YourFormRequest class
 *
 * @param \App\Http\Requests\YourFormRequest $request
 * @return \Illuminate\Http\Redirect|string
 */
public function store(YourFormRequest $request)
{
    if($request->file('filename')) {
        $file = $request->file('filename');

        $fileName = $file->getClientOriginalName();
        $fileExt  = $file->getClientOriginalExtension();
        $fileMime = $file->getClientMimeType();

        // and rest of the file details

        // Move the file now
        $updatedFileName = $fileName.'.'.$fileExt;
        $file->move('path/to/destination/folder', $updatedFileName);

        // or using the Storage class, it is the same
        // as what you have written.
    }
}

更新 1:

在您的YourFormRequest 文件中,替换授权方法:

/**
 * Authorize the request.
 *
 * @return bool
 */
public function authorize()
{
    return true; // replace false with true.
}

希望这对您有所帮助。干杯。

【讨论】:

  • 我已经尝试过了,先生,但我遇到了一个错误。“调用未定义的方法 Illuminate\Support\Facades\Request::file()”
  • 你确定你使用的是我上面写的代码吗?问因为,绝对正确。我已经在我的机器上尝试并测试过了。希望你已经用上面的代码更新了 store 方法。
  • 是的先生..我已经使用它了,现在,每当我上传文件时,我都会收到错误“禁止”
  • 你好,先生,我试过了,先生,但我有一个空白页..因为全白没有写任何东西...... T___T
  • 请更新问题,并请告诉我store 方法你写了什么?
猜你喜欢
  • 1970-01-01
  • 2016-02-25
  • 2016-03-06
  • 2016-04-07
  • 2016-03-29
  • 2017-12-28
  • 1970-01-01
  • 2016-03-19
  • 2016-08-01
相关资源
最近更新 更多