Laravel在上传大文件时返回NULL

时间:2015-04-08 13:45:58

标签: php apache laravel file-upload

我的表格

{{ Form::open(array('url' => 'upfile', 'files' => 'true', 'method' => 'post', 'class' => 'form')) }}
        <p>Sólo se admiten archivos en formato .pdf y no mayor a 127MB</p>
        <p>
        {{ Form::file('expediente', array('class' => 'text-field column_one', 'required' => 'required')) }}
        </p><br>
        <p>
        {{ Form::text('nombrearchivo', null, array('class' => 'text-field column_one', 'required' => 'required', 'placeholder' => 'Nombre del Expediente.')) }}
        </p><br>

        {{ Form::hidden('username', $username) }}

        <p style="color: red;">
            <ul>
            @foreach ($errors->all() as $message)
                <li style="color:red;">{{$message}}</li>
            @endforeach
            <ul>
        </p>
        {{ Form::submit('Añadir Expediente', array('class' => 'submit submitNavy submitForm')) }}
 {{ Form::close() }}

我的控制器:

public function saveExpediente(){
    ini_set("memory_limit","7G");
    ini_set('upload_max_filesize', '127M');
    ini_set('post_max_size', '127M');
    ini_set('max_input_time', 0);
    ini_set('max_execution_time', 0);
    set_time_limit(0);
    ignore_user_abort(true);

    $rules = array(
        'username' => 'required|exists:users,username',
        'expediente' => 'required',
        'nombrearchivo'    =>  'required|min:5'
    );

    $validator = Validator::make(Input::all(), $rules);
    //$fileExtension = Input::file('expediente')->guessClientExtension();
    $file = Input::file('expediente');
    if ($validator->fails()) {
        //dd($file);
        return Redirect::back()
            ->withErrors($validator) // send back all errors to the login form
            ->withInput(); // send back the input (not the password) so that we can repopulate the form
    }/*else if ($fileExtension != 'pdf'){
        $validator->failed();
        return Redirect::to('upload')->withErrors([
            'expediente' => 'El archivo debe estar en formato PDF!',
        ])->withInput();
    }*/else {

        File::makeDirectory('expedientes/'.Input::get('username'), 0770, true, true);
        Input::file('expediente')->move('expedientes/'.Input::get('username'),Input::file('expediente')->getClientOriginalName());

        $expediente = new Expediente;
        $expediente->username =  Input::get('username');
        $expediente->archivo = Input::file('expediente')->getClientOriginalName();
        $expediente->nombrearchivo = Input::get('nombrearchivo');
        $expediente->save();

        return Redirect::back()->with('message', 'Se añadió correctamente el expediente al usuario.')->with('tipo','message-success');
    }
}

当我上传大于8mb的laravel返回NULL时,就像字段一样,它们是空的。我已经获得了PHP.init变量的值。我使用的是Laravel 4.2和Apache,需要25-40 MB的上传文件大小。如果我尝试dd(Input :: file('expediente'))返回NULL

2 个答案:

答案 0 :(得分:1)

您需要增加文件上传的内存限制。你可以通过提到控制器开头的限制大小来做到这一点。

ini_set(&#39; memory_limit&#39;,&#39; size&#39;);

例如:

ini_set('memory_limit', '40M');

您可能还需要在表单

中提及enctype(编码类型)

示例: -

{{ Form::open(array( 'url' => 'upfile', 'method' => 'post', 'class' => 'form', 'enctype' => 'multipart/form-data' )) }}

也许你不需要这个 'files' => 'true'

答案 1 :(得分:1)

  1. 检查错误:

    $request->file('image')->getErrorMessage()

  2. 如果错误如下:

    The file "image_name.jpeg" exceeds your upload_max_filesize ini directive (limit is 2048 KiB)

  3. 在空白页面中,执行下一个命令以找到php.ini:

    <?php phpinfo() ?>

  4. 在php.ini文件中,编辑以下几行:

    post_max_size

    upload_max_filesize

  5. 增加内存限制(默认为2M),您可以尝试使用10M。