我有一个包含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
]);
}
}
答案 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);
}
}
}