Learn more about fetch function.
HTML & Javascript Code:
<!DOCTYPE html>
<html>
<head>
<title> Fetch JS - Code With Mark </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function($)
{
//https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
$(document).on('click', '.btn_get_api_data', function(event)
{
event.preventDefault();
const url = 'https://randomuser.me/api/';
const options =
{
method: 'GET', // *GET, POST, PUT, DELETE
};
fetch(url, options)
.then(response => response.json())
.then(json =>
{
var str = JSON.stringify(json.results, null, 5);
$(document).find('.post_msg').html('<pre class="bg-dark text-white">'+str+'</pre>');
}
).catch(err =>
console.error(err)
);
});
//--->load user screen > start
$(document).on('click', '.btn_load_user_screen', function(event)
{
event.preventDefault();
var s1 = $(document).find('.container_user_screen').html();
$(document).find('.post_msg').html(s1);
});
//--->load user screen > end
//--->upload file > start
$(document).on('click', '.btn_upload_file_data', function(event)
{
event.preventDefault();
let e0 = $(document).find('.post_msg');
//get file objects
let f0 = e0.find('#f0')[0].files;
let f1 = e0.find('#f1')[0].files;
let f2 = e0.find('#f2')[0].files;
let fd = new FormData();
fd.append('user_name', e0.find('.user_name').val());
fd.append('user_email', e0.find('.user_email').val());
//single file
fd.append('file_obj_0',f0[0]);
//get all the files for group 1
$.each(f1, function(i1, v1)
{
fd.append('file_obj_1[]',v1);
});
//get all the files for group 2
$.each(f2, function(i2, v2)
{
fd.append('file_obj_2[]',v2);
});
const url = 'ajax.php';
const options =
{
method: 'POST',
body: fd,
};
fetch(url, options)
.then(response => response.json())
.then(json =>
{
var s1 = $(document).find('.post_msg');
var str = JSON.stringify(json, null, 5);
s1.html('<pre class="bg-dark text-white">'+str+'</pre>');
if(json.file_obj_1.length > 0)
{
$.each(json.file_obj_1, function(i1, v1)
{
var t1 = ''
+'<div class="1col-md-3">'
+'<img src="'+v1.download_file_path+'" class="rounded-circle" width="100" height="100">'
+'<br>'
+'<a href="'+v1.download_file_path+'" download class="btn btn-success">Download File</a>'
+'</div>'
;
s1.append(t1);
});
s1.append('<br><br>');
}
}
).catch(err =>
console.error(err)
);
});
//--->upload file > end
});
</script>
</head>
<body>
<div style="padding-top:30px;">
<div class="container text-center">
<h1 class="">Fetch - Upload Files </h1>
<div class="btn btn-success btn_get_api_data">Get API Data</div> | <div class="btn btn-success btn_load_user_screen">Upload File</div>
<br><br>
<div class="post_msg text-left"></div>
</div>
</div>
<div style="display:none;" class="container_user_screen">
<div class="form-group">
<label for="usr">Name:</label>
<input type="text" class="form-control user_name">
</div>
<div class="form-group">
<label >Email</label>
<input type="text" class="form-control user_email">
</div>
<div class="card" style="padding:10px;">
<label >Single File</label>
<input type="file" id="f0">
<br>
</div>
<br>
<div class="card" style="padding:10px;">
<label >Multiple Files</label>
<input type="file" id="f1" multiple>
<br>
</div>
<br>
<div class="card" style="padding:10px;">
<label >Multiple Files</label>
<input type="file" id="f2" multiple>
</div>
<br>
<span class="btn btn-primary btn_upload_file_data">Upload</span>
</div>
</body>
</html>
PHP Code:
<?php
define("ABSPATH", str_replace("\\", "/", dirname(__FILE__) ));
if (isset($_SERVER['HTTPS']) &&
($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$ssl = 'https';
}
else {
$ssl = 'http';
}
$app_url = ($ssl )
. "://".$_SERVER['HTTP_HOST']
//. $_SERVER["SERVER_NAME"]
. (dirname($_SERVER["SCRIPT_NAME"]) == DIRECTORY_SEPARATOR ? "" : "/")
. trim(str_replace("\\", "/", dirname($_SERVER["SCRIPT_NAME"])), "/");
if(isset($_POST['user_name']))
{
$el = $_POST;
$user_name = $el['user_name'];
$user_email = $el['user_email'];
$upload_folder_path = '/uploads/';
$a0 = array();
$a1 = array();
$a2 = array();
//--->upload > single file > start
if(isset($_FILES['file_obj_0']))
{
$file_obj_0 = $_FILES['file_obj_0'];
$v1 = $file_obj_0['name'];
$file_name = $v1;
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
$new_file_name = 'file_obj_0_'. hash('crc32',uniqid()).'.'.$ext;
$fileDest = ABSPATH.$upload_folder_path.$new_file_name;
move_uploaded_file($file_obj_0['tmp_name'] ,$fileDest);
array_push($a0, array(
'old_file_name' => $v1,
'new_file_name' => $new_file_name,
'move_to_folder'=>$app_url.$upload_folder_path,
'download_file_path'=>$app_url.$upload_folder_path.$new_file_name,
));
}
//--->upload > single file > end
//--->upload group files > 1 > start
if(isset($_FILES['file_obj_1']))
{
$file_obj_1 = $_FILES['file_obj_1'];
foreach ($file_obj_1['name'] as $k1 => $v1)
{
$file_name = $v1;
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
$new_file_name = 'file_obj_1_'. hash('crc32',uniqid()).'.'.$ext;
$fileDest = ABSPATH.$upload_folder_path.$new_file_name;
move_uploaded_file($file_obj_1['tmp_name'][$k1] ,$fileDest);
array_push($a1, array(
'old_file_name' => $v1,
'new_file_name' => $new_file_name,
'move_to_folder'=>$app_url.$upload_folder_path,
'download_file_path'=>$app_url.$upload_folder_path.$new_file_name,
));
}
}
//--->upload group files > 1 > end
//--->upload group files > 2 > start
if(isset($_FILES['file_obj_2']))
{
$file_obj_2 = $_FILES['file_obj_2'];
foreach ($file_obj_2['name'] as $k1 => $v1)
{
$file_name = $v1;
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
$new_file_name = 'file_obj_2_'. hash('crc32',uniqid()).'.'.$ext;
$fileDest = ABSPATH.$upload_folder_path.$new_file_name;
move_uploaded_file($file_obj_2['tmp_name'][$k1] ,$fileDest);
array_push($a2, array(
'old_file_name' => $v1,
'new_file_name' => $new_file_name,
'move_to_folder'=>$app_url.$upload_folder_path,
'download_file_path'=>$app_url.$upload_folder_path.$new_file_name,
));
}
}
//--->upload group files > 2 > end
echo json_encode(array(
'user_name'=>$user_name,
'user_email'=>$user_email,
'file_obj_0' => $a0,
'file_obj_1' => $a1,
'file_obj_2' => $a2,
));
}
?>