【问题标题】:Laravel 4.2 Input File NullLaravel 4.2输入文件空
【发布时间】:2015-11-16 17:06:57
【问题描述】:

我有结合 Laravel 4.2 和 Ajax 上传多个图像文件的表单。但是上传图片时,输入文件总是NULL。我该如何解决?

这是我的上传表单。

{{ Form::open(array('url' => route('member.font.upload.images'), 'files'=>true, 'id'=>'upload-images', 'method'=> 'post')) }}
    {{ Form::file('image[]', array('multiple'=>true, 'id'=>'images')) }}
    <input type="hidden" name="font" value="{{ $font->id }}">
{{ Form::close() }}

并在控制器中上传过程。

public function uploadImages()
{
$rules = array(
    'font' => 'required'
);

$validator = Validator::make(Input::all(), $rules);

if ($validator->fails()) {
    return Response::json(['success' => false, 'message' => 'Failed upload image']);
} else {
    if(Input::hasFile('image')){
        $images = Input::file('image');
        foreach($images as $image) {
            $imagename = time() . $image->getClientOriginalName();
            $upload =  $image->move('images/', $imagename);

            if($upload){
                $data = new Image;
                $data->font_id      = Input::get('font');
                $data->name         = $imagename;
                $data->save();
            }
        }
        return Response::json(['success' => true, 'message' => 'Success']);
    }else{
        return Response::json(['success' => false, 'message' => 'File not found']);
    }
}
}

然后是 Ajax 进程。

$('#images').change(function(e) {
e.preventDefault();
$.ajax({
    url: $('#upload-images').attr('action'),
    type: 'post',
    dataType: 'json',
    data: $('#upload-images').serialize(),
    beforeSubmit: function() {
        $('.add-images').removeClass('enabled').addClass('uploading');
    },
    success: function(data) {
        $('.add-images').removeClass('uploading').addClass('enabled');
    },
    error: function() {}
    });
});

【问题讨论】:

  • 使用serialize() 不会上传文件。用ajax上传文件不难研究

标签: jquery ajax laravel laravel-4


【解决方案1】:

您可能需要定义表单的编码类型。

{{ Form::open(array('url' => route('member.font.upload.images'), 'files'=>true, 'id'=>'upload-images', 'method'=> 'post', 'enctype' => "multipart/form-data")) }}

您可以使用此W3Schools doc 了解更多详情。

【讨论】:

    【解决方案2】:

    更改此部分:

    {{ Form::open(array('url' => route('member.font.upload.images'), 'files'=>true, 'id'=>'upload-images', 'method'=> 'post')) }}
    

    收件人:

    {{ Form::open(array('route' => 'member.font.upload.images', 'files'=>true, 'id'=>'upload-images', 'method'=> 'post')) }}
    

    【讨论】:

    • 这是我的路线 Route::post('upload-images', array('as'=>'member.font.upload.images', 'uses'=>'MemberController@uploadImages') );
    • 首先没有解决没有文件上传的问题
    • 也许问题是你的ajax $('#upload-images').serialize() 试试$('form').serialize(),
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2015-09-09
    • 2015-05-10
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2016-10-18
    • 2018-01-10
    相关资源
    最近更新 更多