Laravel 5.5使用1个文件输入保存多张照片

时间:2017-09-20 12:29:25

标签: php ajax laravel

我有一个包含1个文件输入的表单,我的目标是使用CTRL +点击存储我选择的所有图片。

我的ajax调用的响应总是只返回1个文件名如何让它返回我所有文件的对象?

我的输入字段:

<?php echo Form::file('photos[]', ['multiple', 'id' => 'photos']); ?>

我的Ajax电话:

let token = $('meta[name="csrf-token"]').attr('content');
let photos = $('input[type=file]').val().split('\\').pop();

var values = {
    photos: photos,
}

$.ajax({
   type: 'POST',
   url: '/upload',
   dataType: 'JSON',
   data: {
       "_method": 'POST',
       "_token": token,
       "values": values
   },
   success:function(data){
       console.log('success');
       console.log(data);
   },
   error:function(){
   },
});

我的控制器方法:

/**
 * Handles the upload of the images.
 *
 * @return Response
 */
public function uploadSubmit(Request $request)
{
    if ($request->isMethod('post')){  

        $values = $request->values;

        return response()->json([
                                    'response'  => 'This is post method',
                                    'values'    => $values
                                ]); 
    }
}

1 个答案:

答案 0 :(得分:0)

尝试下面的代码并在ajax代码中进行一些更改。在代码中添加以下参数。

processData: false,
contentType: false,

在AJAX启动之前添加var formData = new FormData($("#formID")[0]);行。

或检查以下代码并根据您的代码进行更改。

您应该使用以下jquery代码使用AJAX上传文件。

var formData = new FormData($(form)[0]);
$.ajax({
    url: form.action,
    type: form.method,
    data: formData,
    processData: false,
    contentType: false,
    beforeSend: function (xhr) {
        xhr.setRequestHeader('X-CSRF-Token', $("meta[name='_csrf']").attr("content"));
    },
    success: function (response) {

    }
});

控制器端代码:

foreach($request->only('files') as $files){
    foreach ($files as $file) {
        if(is_file($file)) {    // not sure this is needed
            $fname = $file->getClientOriginalName();
            $string = str_random(16);
            $ext = $file->guessExtension();
            $file_name = $string . '.' .  $ext;
            $filepath = 'uploads/' . $file_name;
            $file->storeAs('uploads/', $file_name);
        }
    }
}