File "ex02.php"

Full Path: /home/analogde/www/30_09_2024/ex02.php
File size: 15.16 KB
MIME-type: text/html
Charset: utf-8


<!--

voir ???

https://www.codexworld.com/upload-multiple-files-with-javascript-using-php/


 formData.append("files[]", fileInput.files[i]);
-->

	<div id="file_count"></div>
	
	<!--
	<input type="file" id="fileUpload" multiple /> 
	-->
	
	<form id="form_transfert_fichier" name="form_transfert_fichier" enctype="multipart/form-data">
	
		<input type="file" id="uploadFile" name="fichiers_transfert[]" multiple="multiple" />
	
	
		<br>
		<br>
		<button onclick="uploadFiles()">Upload</button> 
		
		<!--
		<button onclick="query()">Upload</button> 
		-->
		
		<input type="button" value="Envoi" onclick="debug();" /> 
	
	</form>
	
	<div id="upload_prev"></div>

	<div id="server_response">Pas de réponse du serveur</div>

<style>

input[type="file"] {
width:100px;
overflow: hidden;
}

.filenameupload {
  width: 98%;
}



#upload_prev {
  border: thin solid #000;
  width: 65%;
  padding: 0.5em 1em 1.5em 1em;
}

#upload_prev span {
  display: flex;
  padding: 0 5px;
  font-size: 12px;
}

</style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<script>

		

		var fileCount = 0;

		var xhr

		function sendFile()
		{
			document.getElementById("server_response").innerHTML = "";//clear previous server response
			
			var url = "upload_files.php";
			
			xhr = new XMLHttpRequest();
			
			xhr.open("POST", url, true);
			//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
			xhr.onreadystatechange = function()
			{
				if(xhr.readyState == 4 && xhr.status == 200)
				{
					document.getElementById("server_response").innerHTML = xhr.responseText;
					
					alert(xhr.responseText);
					
				}
			}


			var formData = new FormData();
			formData = traitement();
			
			console.log(" +++++++++++++++++++++ ");
			
			for (let keyValue of formData.entries())
			{
				console.log(keyValue);
			}
			
			for (var newfile of formData.getAll('file'))
			{
				console.log(newfile.name);
				console.log(newfile.size);
			}  
			
			
						
			xhr.send(formData); 
		}	

		
function envoi()
{

		var formData = new FormData();
		formData = traitement();
		
		console.log("#########################################");
		
		var numb = Array.from(formData.keys()).length;
		
		let indice = 0;
		
		
		for (const pair of formData.entries()) {  
  console.log('${pair[0]}, ${pair[1]}');  
}  
		
		var retour = formData.getAll('files')
		
		console.log(" xxxx " + retour);
		
		for (let keyValue of formData.entries())
		{
				var lulu = formData[indice];
				
				console.log("Contenu " + lulu);
				
				
				console.log("Indice " + indice);
				++indice;
				
				
		}
		
		console.log("---> " + numb);
		
		
		//for (var i = 0; i < numb; ++i) 
		//for (let item of formData) 
		//{
			//var data_envoi = new FormData();
			//data_envoi.append('file', item);
/*
				document.getElementById("server_response").innerHTML = "";//clear previous server response
			
				var url = "upload_files.php";
			
				xhr = new XMLHttpRequest();
			
				xhr.open("POST", url, true);
				//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
				xhr.onreadystatechange = function()
				{
					if(xhr.readyState == 4 && xhr.status == 200)
					{
						document.getElementById("server_response").innerHTML = xhr.responseText;
					
						alert(xhr.responseText);
					}
				}
				
				xhr.send(formData); 
	*/			
		
		
		/*for (let item of formData) 
		{
            console.log(item)
			
			
        }*/
		
		
		
		/*for (let keyValue of formData.entries())
		{
				console.log(keyValue);
				
				var data_envoi = new FormData();
				data_envoi.append('file', keyValue);

				document.getElementById("server_response").innerHTML = "";//clear previous server response
			
				var url = "upload_files.php";
			
				xhr = new XMLHttpRequest();
			
				xhr.open("POST", url, true);
				//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
				xhr.onreadystatechange = function()
				{
					if(xhr.readyState == 4 && xhr.status == 200)
					{
						document.getElementById("server_response").innerHTML = xhr.responseText;
					
						alert(xhr.responseText);
					}
				}
				
				xhr.send(data_envoi); 
				
				
		}
			
		for (var newfile of formData.getAll('file'))
		{
			console.log(newfile.name);
			console.log(newfile.size);
	 		//MIME type
		}  */
}

var showFileCount = function() {
  $('#file_count').text('# Files selected: ' + fileCount);
};

showFileCount();

	$(document).on('click', '.close', function() 
	{
		$(this).parents('span').remove();
		fileCount -= 1;
		showFileCount();
	})

	$('#uploadFile').on('change', function() 
	{

		var filename = this.value;
		var lastIndex = filename.lastIndexOf("\\");
		if (lastIndex >= 0) 
		{
			filename = filename.substring(lastIndex + 1);
		}
  
		var files = $('#uploadFile')[0].files;
		
		for (var i = 0; i < files.length; i++) 
		{
			$("#upload_prev").append('<span>' + '<div class="filenameupload">' + files[i].name + '</div>' + '<p class="close" >X</p></span>');
		}
  
		fileCount += files.length;
		showFileCount();
	});

function uploadFiles() 
{
           // var fileInput = document.getElementById('fileUpload');
           // var files = fileInput.files;
		   
		    /*var files = uploadFile.files;

			var inp = document.getElementById('uploadFile');
			for (var i = 0; i < inp.files.length; ++i) 
			{
				var name = inp.files.item(i).name;
				console.log("here is a file name: " + name);
				
				traitement(files[i], name,  i)
				
				
			}*/
			//traitement();
			
			const uploadForm = document.querySelector('form_transfert_fichier');
			
			console.log("message ..." + uploadForm);
}

//function traitement(file, name, indice)

function query()
{

	//form_transfert_fichier

	//var inp = document.getElementById('form_transfert_fichier');
	
	//console.log("inp");
	
	
	// const formData = new FormData('form_transfert_fichier')
     //   console.log(formData);
	
	// form_transfert_fichier
	
	console.log("message");
	
	
	/*for (let keyValue of formData.entries())
			{
				console.log(keyValue);
			}
			
			*/
}


function xhr_send(data)
{

			document.getElementById("server_response").innerHTML = "";//clear previous server response
			
			var url = "upload_files.php";
			
			xhr = new XMLHttpRequest();
			
			xhr.open("POST", url, true);
			//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
			xhr.onreadystatechange = function()
			{
				if(xhr.readyState == 4 && xhr.status == 200)
				{
					document.getElementById("server_response").innerHTML = xhr.responseText;
					
					alert(xhr.responseText);
					
				}
			}
						
			xhr.send(data); 

}

function debug()
{
			array_valide_file = [];
			
			let numb = document.getElementById("upload_prev").childNodes.length;
			console.log(" ----- " + numb);
			
			var theDiv = document.getElementById('upload_prev').children;
			
			console.log(" ++++ " + theDiv.length);
			
			for (var i = 0; i < theDiv.length; i++) 
			{
				if (theDiv[i].tagName == 'SPAN')
				{ 
					var pipo = theDiv[i].children;
					console.log(" On a deux éléments dans le span" + pipo.length  );
					array_valide_file.push( pipo[0].innerHTML );
				}
			}
			
			for (i = 0; i < array_valide_file.length; i++)
			{
				console.log("Contenu " + i + "  " + array_valide_file[i] );
			}
			
			var fileInput = document.getElementById('uploadFile');
            //var files = fileInput.files;

			var inp = document.getElementById('uploadFile');
			for (var i = 0; i < inp.files.length; ++i) 
			{
				var name = inp.files.item(i).name;
				console.log("here is a file name: " + name);
				
				for (var j = 0; j < array_valide_file.length; ++j) 
				{
					if( name == array_valide_file[j])
					{
						console.log(" Bingo envoi  " + name ) 
						// maintenant on va remplir le nouveau Formdata
						var formData = new FormData();
						formData.append('file', inp.files[i]);
						
						xhr_send(formData);
						
					}
				}
				
			}
			
			// pour le debug, je veux voir le contenu de formdata - on going ....
/*			
			console.log(" +++++++++++++++++++++ ");
			
			for (let keyValue of formData.entries())
			{
				console.log(keyValue);
			}
			
			for (var newfile of formData.getAll('file'))
			{
				console.log(newfile.name);
				console.log(newfile.size);
	 
				//MIME type
			}  
*/			
			//var arraycontains = (tableau.indexOf("volvo.txt") > -1);
			
			
			/*if(  name == "volvo.txt" )
			{
					console.log(">>>> " + indice + "   " + name + "  " + file );
					formData.append('file', file);
			}*/
			//console.log("TRACE....");
			
			return(formData);
			
}			



function traitement()
{
			//https://www.encodedna.com/javascript/practice-ground/default.htm?pg=javascript_indexof_method
			
			//var inp = document.getElementById('upload_prev');
			//console.log(" ----- " + inp.length);
			
			// vide le tableau
			array_valide_file = [];
			
			let numb = document.getElementById("upload_prev").childNodes.length;
			console.log(" ----- " + numb);
			
			var theDiv = document.getElementById('upload_prev').children;
			
			console.log(" ++++ " + theDiv.length);
			
			for (var i = 0; i < theDiv.length; i++) 
			{
			 
			   if (theDiv[i].tagName == 'SPAN')
			   { 
					var pipo = theDiv[i].children;
					console.log(" On a deux éléments dans le span" + pipo.length  );
					
					//for (var j = 0; j < pipo.length; j++) 
					//{
						// on prend uniquement le premier qui correspond class="filenameupload"
						// console.log( pipo[0].innerHTML + "  " + pipo[0].className );
						 
						 array_valide_file.push( pipo[0].innerHTML );
						 // différence entre append et push
					//}
					
				 //console.log( theDiv[i].innerHTML );
				 // result.innerHTML
			   }
			}
			
			for (i = 0; i < array_valide_file.length; i++)
			{
				console.log("Contenu " + i + "  " + array_valide_file[i] );
			}
			
			
			// maintenant on va remplir le nouveau Formdata
			
            var formData = new FormData();
			
			
			var fileInput = document.getElementById('uploadFile');
            //var files = fileInput.files;

			var inp = document.getElementById('uploadFile');
			for (var i = 0; i < inp.files.length; ++i) 
			{
				var name = inp.files.item(i).name;
				console.log("here is a file name: " + name);
				
				for (var j = 0; j < array_valide_file.length; ++j) 
				{
					if( name == array_valide_file[j])
					{
						console.log(" Bingo  " + name ) 
						formData.append('file', inp.files[i]);
						
						// essai à faire
						 //formData.append("files[]", fileInput.files[i]);
						 
						 // google >>>> javascript post form data with multiple of files to php
						 
						 // https://stackoverflow.com/questions/12989442/uploading-multiple-files-using-formdata
						 
						 // https://www.tutorialswebsite.com/upload-multiple-files-using-javascript-and-php/
						 
						 //https://www.codexworld.com/upload-multiple-files-with-form-data-using-jquery-ajax-php/
						 
						 //https://hackernoon.com/how-to-create-a-multiple-files-uploader-for-your-php-application
						 
						 // https://www.tutorialspoint.com/how-to-select-and-upload-multiple-files-with-html-and-php-using-http-post
						 
						 // https://digitalfox-tutorials.com/tutorial.php?title=Preview-validate-and-upload-multiple-files-with-javascript-AJAX-and-PHP
						
						//https://blog.filestack.com/upload-multiple-files-using-javascript/
						
						// https://www.studentstutorial.com/ajax/multiple-file-upload#google_vignette
						
						// https://www.webslesson.info/2021/07/javascript-multiple-file-upload-progress-bar-with-php.html
					
					}
				}
				
			}
			
			// pour le debug, je veux voir le contenu de formdata - on going ....
/*			
			console.log(" +++++++++++++++++++++ ");
			
			for (let keyValue of formData.entries())
			{
				console.log(keyValue);
			}
			
			for (var newfile of formData.getAll('file'))
			{
				console.log(newfile.name);
				console.log(newfile.size);
	 
				//MIME type
			}  
*/			
			//var arraycontains = (tableau.indexOf("volvo.txt") > -1);
			
			
			/*if(  name == "volvo.txt" )
			{
					console.log(">>>> " + indice + "   " + name + "  " + file );
					formData.append('file', file);
			}*/
			//console.log("TRACE....");
			
			return(formData);
			
}			


function getMimeTypeFromExtension(extension = "txt")
 {
    if (extension[0] === ".") 
	{
        extension = extension.substr(1);
    }
    return {
        "aac": "audio/aac",
        "abw": "application/x-abiword",
        "arc": "application/x-freearc",
        "avi": "video/x-msvideo",
        "azw": "application/vnd.amazon.ebook",
        "bin": "application/octet-stream",
        "bmp": "image/bmp",
        "bz": "application/x-bzip",
        "bz2": "application/x-bzip2",
        "cda": "application/x-cdf",
        "csh": "application/x-csh",
        "css": "text/css",
        "csv": "text/csv",
        "doc": "application/msword",
        "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "eot": "application/vnd.ms-fontobject",
        "epub": "application/epub+zip",
        "gz": "application/gzip",
        "gif": "image/gif",
        "htm": "text/html",
        "html": "text/html",
        "ico": "image/vnd.microsoft.icon",
        "ics": "text/calendar",
        "jar": "application/java-archive",
        "jpeg": "image/jpeg",
        "jpg": "image/jpeg",
        "js": "text/javascript",
        "json": "application/json",
        "jsonld": "application/ld+json",
        "mid": "audio/midi audio/x-midi",
        "midi": "audio/midi audio/x-midi",
        "mjs": "text/javascript",
        "mp3": "audio/mpeg",
        "mp4": "video/mp4",
        "mpeg": "video/mpeg",
        "mpkg": "application/vnd.apple.installer+xml",
        "odp": "application/vnd.oasis.opendocument.presentation",
        "ods": "application/vnd.oasis.opendocument.spreadsheet",
        "odt": "application/vnd.oasis.opendocument.text",
        "oga": "audio/ogg",
        "ogv": "video/ogg",
        "ogx": "application/ogg",
        "opus": "audio/opus",
        "otf": "font/otf",
        "png": "image/png",
        "pdf": "application/pdf",
        "php": "application/x-httpd-php",
        "ppt": "application/vnd.ms-powerpoint",
        "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
        "rar": "application/vnd.rar",
        "rtf": "application/rtf",
        "sh": "application/x-sh",
        "svg": "image/svg+xml",
        "swf": "application/x-shockwave-flash",
        "tar": "application/x-tar",
        "tif": "image/tiff",
        "tiff": "image/tiff",
        "ts": "video/mp2t",
        "ttf": "font/ttf",
        "txt": "text/plain",
        "vsd": "application/vnd.visio",
        "wav": "audio/wav",
        "weba": "audio/webm",
        "webm": "video/webm",
        "webp": "image/webp",
        "woff": "font/woff",
        "woff2": "font/woff2",
        "xhtml": "application/xhtml+xml",
        "xls": "application/vnd.ms-excel",
        "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "xml": "application/xml",
        "xul": "application/vnd.mozilla.xul+xml",
        "zip": "application/zip",
        "3gp": "video/3gpp",
        "3g2": "video/3gpp2",
        "7z": "application/x-7z-compressed"
    }[extension] || "application/octet-stream";
}
</script>