【问题标题】:Laravel 5 - upload file using ajaxLaravel 5 - 使用 ajax 上传文件
【发布时间】:2016-04-18 15:11:40
【问题描述】:

我有这个 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 payload 发送的文件:

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

在我的 Laravel 控制器中,我无法获得任何输入。 Input::all() 返回空,Request::instance()-&gt;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;

我能做什么?

谢谢

【问题讨论】:

  • 你在问你能做什么?您可以问自己为什么尝试通过常规输入法获取文件。在普通的 PHP 中,文件也是一种特殊的输入,它有自己的数组 ($_FILES),这在 Laravel 中没有什么不同。 laravel.com/docs/5.2/requests#files
  • 当我做 print_r($_POST); print_r($_FILES);它还显示了两个空数组。正如我所说,问题不仅出在文件中,输入字段也为空

标签: php jquery ajax laravel file-upload


【解决方案1】:

假设文件已实际上传(见下文),您不会像普通输入一样访问它。有一种访问文件的特殊方法称为file。所以\Request::instance()-&gt;file('myfile') 就是你想要的。

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

【讨论】:

  • 正如我所说,问题不仅在文件中,而且输入字段为空
猜你喜欢
  • 2016-07-21
  • 2015-11-28
  • 2019-07-26
  • 2016-08-11
  • 1970-01-01
  • 2015-07-28
  • 2021-09-13
  • 2016-08-21
相关资源
最近更新 更多