0
I have an input type="file" that would suit the user to add a profile photo and would like to check if the file is an image before.
I have already checked via PHP, but I would like to do via Javascript also.
0
I have an input type="file" that would suit the user to add a profile photo and would like to check if the file is an image before.
I have already checked via PHP, but I would like to do via Javascript also.
0
Yes, including, you can add in HTML too if you don’t know:
<input type="file" accept="image/*"/>
I’ll give you the basis, then just implement conditions:
function validation(){
  var file = document.getElementById("myFile");
  var file = file.files[0];
  
  document.getElementById("logger").innerHTML = "Nome: " + file.name + " <br />Type: " + file.type + "<br />Tamanho: " + file.size;
}
 <input type="file" id="myFile" accept="image/*" onchange="validation()" />
  <br />
  
  <div id="logger">
    
  </div>
0
You can use the attribute type of the file, it will return the type in the format image/png, just check if it contains the text image
Ex.:
var file = document.getElementById('file');
function test() {
    if (file.files[0].type.includes('image')) {
        alert('É uma imagem')
    } else {
         alert('Outro tipo de arquivo')
    }
}
document.getElementById('testButton').addEventListener('click', test)
<input type="file" id="file">
<button id="testButton">Testar</button>
Note: The type is detected from the file extension, which cannot be very safe
I made another example based on this reply, is more complex, but more secure than the previous:
var fileInput = document.getElementById('fileInput')
var fileReader = new FileReader();
fileReader.onloadend = function(e) {
    var arr = (new Uint8Array(e.target.result)).subarray(0, 4);
    var header = "";
    for(var i = 0; i < arr.length; i++) {
       header += arr[i].toString(16);
   }
    var type = ""
    switch (header) {
        case "89504e47":
            type = "image/png";
            break;
        case "47494638":
            type = "image/gif";
            break;
        case "ffd8ffe0":
        case "ffd8ffe1":
        case "ffd8ffe2":
        case "ffd8ffe3":
        case "ffd8ffe8":
            type = "image/jpeg";
            break;
        default:
            type = "unknown"; // Or you can use the blob.type as fallback
            break;
    }
    
    alert(type)
};
fileInput.addEventListener('change', function () {
    var blob = fileInput.files[0]
    fileReader.readAsArrayBuffer(blob);
})
<input type="file" id="fileInput"/>
0
You can check by using file extension .match with the regex:
/\.(gif|jpg|jpeg|tiff|png)$/i
Example:
function isImagem(i){
   
   var img = i.value.split(".");
   var ext = "."+img.pop();
   if(!ext.match(/\.(gif|jpg|jpeg|tiff|png)$/i)){
      alert("Não é imagem");
      i.value = '';
      return;
   }
   alert("OK!");
}
<input type="file" onchange="isImagem(this)" />
Browser other questions tagged php javascript html jquery
You are not signed in. Login or sign up in order to post.
Thanks man, I really didn’t know, thanks.
– Alisson