Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 上传文件为空Laravel 5.4_Php_Ajax_Html_Laravel - Fatal编程技术网

Php 上传文件为空Laravel 5.4

Php 上传文件为空Laravel 5.4,php,ajax,html,laravel,Php,Ajax,Html,Laravel,我试图使用ajax在控制器中发送文件数据,但它不起作用。 下面是代码结构 形式 <form id="contact_img" enctype="multipart/form-data"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input id="contact_image" name="contact_image" type="file" cla

我试图使用ajax在控制器中发送文件数据,但它不起作用。 下面是代码结构

形式

    <form id="contact_img" enctype="multipart/form-data">
      <input type="hidden" name="_token" value="{{ csrf_token() }}">
      <input id="contact_image" name="contact_image" type="file" class="file">
      <input type="text" class="form-control" name="testtest" id="testtest" required>
      <button type="submit" class="btn-default">Save</button>
    </form>
我的网络路线

路由::get('admin/upload\u contact\u img','admin_controller@contact_img_upload');

控制器

public function contact_img_upload(Request $form){
    if ($form->hasFile('contact_image')){
        echo $form->file('contact_image');

    }else{
        echo "empty";
    }
    echo $form->testtest;
}
只有输入测试才会显示该值。

尝试使用formData()而不是序列化表单

 $("#contact_img").on('submit', function(e){
       e.preventDefault(); 
       var form = new FormData(e.target)          
      $.ajax({
        url: "{{ url('/') }}/admin/upload_contact_img",
       data : form,
       processData: false,  // tell jQuery not to process the data
       contentType: false,  // tell jQuery not to set contentType
        success: function (data) {
          alert(data);
        },
        type:'POST'
    });
    });

参见示例

使用
jQuery.form.js
通过AJAX提交表单。你也可以上传进度。 访问以下链接


问题在于,Ajax文件上传并不容易。您需要实现例如FileReader

查看此答案:

1)在表单提交按钮中添加
id

<form id="contact_img" enctype="multipart/form-data">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input id="contact_image" name="contact_image" type="file" class="file">
    <input type="text" class="form-control" name="testtest" id="testtest" required>
    <button type="submit" id="submitBtn" class="btn-default">Save</button>
</form>
3) 内部
控制器

public function contact_img_upload(Request $form){
{
    if( $form->hasFile('image')) {
        $image = $form->file('image');

        //Image handling code //
    }

    $testtest = $form->testtest;
    return response()->json(['contact_image' => $image, 'testtest' => $testtest]);   
}

如果您需要一个演示项目,只需克隆此项目

即可将其放在控制器文件的顶部

use Illuminate\Http\UploadedFile;
因为Request的file方法返回light\Http\UploadedFile类的一个实例,并且要对其进行操作,名称空间必须在可能的重复范围内
public function contact_img_upload(Request $form){
{
    if( $form->hasFile('image')) {
        $image = $form->file('image');

        //Image handling code //
    }

    $testtest = $form->testtest;
    return response()->json(['contact_image' => $image, 'testtest' => $testtest]);   
}
use Illuminate\Http\UploadedFile;