Laravel 5 - 使用ajax上传文件

时间:2016-01-13 15:11:19

标签: php jquery ajax laravel file-upload

我有这个HTML表单:

<form action="{{ route('send_form') }}" method="post" class="send_form" enctype="multipart/form-data">
        <input type="hidden" name="_token" class='token' value="{{ csrf_token() }}" />
        <input type="text" id="fullname" name="fullname" placeholder="" >
        <input type="file" id="myfile" name="myfile" />
        <button>Send</button>
</form>

我想通过ajax上传文件,原因如下:

$(".send_form").submit(function(e) {

    e.preventDefault();
    $this = $(this);

    var $form = $( this),
        url = $form.attr( "action");

    $.ajax({
        url: url,  //Server script to process data
        type: 'POST',
        headers: { 'X-CSRF-TOKEN':$form.find('.token').val() },
        // Form data
        data: new FormData($form[0]),
        cache: false,
        contentType: 'json',
        processData: false,
        //Ajax events
        success: function( data ) {
            conosle.log('yesss');
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(jqXHR, textStatus, errorThrown);
        }
    });

    return false;
});

我可以看到通过Chrome开发工具中的Request有效负载发送的文件:

------WebKitFormBoundaryBXAYgtRKJjEyH6NP
Content-Disposition: form-data; name="myfile"; filename="01.png"
Content-Type: image/png

在我的Laravel控制器中,我无法获得任何原因的输入。 Input::all()返回为空,Request::instance()->all()为空,Input::get('fullname')为空。

在我的控制器代码的开头,我有这一切:

namespace App\Http\Controllers;

use App\Http\Requests;

use Request;
use Response;
use Carbon\Carbon;
use Illuminate\Support\Facades\Redirect;
use Lang;
use Validator;
use Input;

我该怎么办?

由于

1 个答案:

答案 0 :(得分:1)

假设文件实际上传(见下文),您不会像普通输入那样访问它。有一种访问名为ParseQuery<ParseObject> query = ParseQuery.getQuery("UserView"); query.whereEqualTo("objectId", id); List<ParseObject> parseObjects = query.find(); if (parseObjects.size() == 0) status = true; else { status = false; for (ParseObject object : parseObjects) { String name= object.get("name").toString(); } } return status; 的文件的特殊方法。所以file就是你想要的。

在没有像Blueimp这样的第三方回退的情况下进行AJAX文件上传时要小心。看起来大多数现代浏览器现在支持它,但IE 8和9不支持,IE 10和11不支持\Request::instance()->file('myfile')。移动设备(Android 4.4及以下版本,Opera Mini)的支持也受到限制。 (Source +一些有趣的错误修复)