Ответ 1
Используйте атрибут accept входного тега. Поэтому, чтобы принимать только PNG, JPEG и GIF, вы можете использовать следующий код:
<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
Мне нужно загрузить только файл изображения через <input type="file">
.
Прямо сейчас, он принимает все типы файлов. Но я хочу ограничить его только конкретными расширениями файлов изображений, которые включают в себя .jpg
, .gif
и т.д.
Как я могу достичь этой функциональности?
Используйте атрибут accept входного тега. Поэтому, чтобы принимать только PNG, JPEG и GIF, вы можете использовать следующий код:
<input type="file" name="myImage" accept="image/x-png,image/gif,image/jpeg" />
Используя это:
<input type="file" accept="image/*">
работает как в FF, так и в Chrome.
Используйте его так:
<input type="file" accept=".png, .jpg, .jpeg" />
Это сработало для меня
Это может быть достигнуто
<input type="file" accept="image/*" />
Но это не очень хорошо. вам нужно закодировать на стороне сервера, чтобы проверить файл на изображении или нет.
Проверьте, является ли файл изображения фактическим или поддельным изображением
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
}
else {
echo "File is not an image.";
$uploadOk = 0;
}
}
Подробнее см. здесь
http://www.w3schools.com/tags/att_input_accept.asp
http://www.w3schools.com/php/php_file_upload.asp
Шаги:
1. Добавьте атрибут accept в тег ввода
2. Подтвердить с помощью javascript
3. Добавьте подтверждение на стороне сервера, чтобы проверить, действительно ли контент является ожидаемым типом файла
Для HTML и javascript:
<html>
<body>
<input name="image" type="file" id="fileName" accept=".jpg,.jpeg,.png" onchange="validateFileType()"/>
<script type="text/javascript">
function validateFileType(){
var fileName = document.getElementById("fileName").value;
var idxDot = fileName.lastIndexOf(".") + 1;
var extFile = fileName.substr(idxDot, fileName.length).toLowerCase();
if (extFile=="jpg" || extFile=="jpeg" || extFile=="png"){
//TO DO
}else{
alert("Only jpg/jpeg and png files are allowed!");
}
}
</script>
</body>
</html>
Объяснение:
Вы можете использовать атрибут accept
для <input type="file">
читать эту документацию http://www.w3schools.com/tags/att_input_accept.asp
Используя type = "file" и accept = "image/*" (или нужный вам формат), разрешите пользователю выбрать файл с определенным форматом. Но вы должны еще раз проверить это на стороне клиента, потому что пользователь может выбрать другой тип файлов. Это работает для меня.
<input #imageInput accept="image/*" (change)="processFile(imageInput)" name="upload-photo" type="file" id="upload-photo" />
А потом, в вашем сценарии JavaScript
processFile(imageInput) {
if (imageInput.files[0]) {
const file: File = imageInput.files[0];
var pattern = /image-*/;
if (!file.type.match(pattern)) {
alert('Invalid format');
return;
}
// here you can do whatever you want with your image. Now you are sure that it is an image
}
}
Вы не можете добиться этого, используя стандартный входной контроль. Общие методы включают проверку этого на стороне сервера или использование некоторого управления загрузкой Flash, которое позволяет больше настроек. Также не забывайте, что проверка расширения файла является необходимым, но не достаточным условием того, что файл является образом. Там ничего не мешает пользователю переименовать исполняемый файл на .jpg
, например.
<script type="text/javascript">
function load_image(id,ext)
{
if(validateExtension(ext) == false)
{
alert("Upload only JPEG or JPG format ");
document.getElementById("imagePreview").innerHTML = "";
document.getElementById("file").focus();
return;
}
}
function validateExtension(v)
{
var allowedExtensions = new Array("jpg","JPG","jpeg","JPEG");
for(var ct=0;ct<allowedExtensions.length;ct++)
{
sample = v.lastIndexOf(allowedExtensions[ct]);
if(sample != -1){return true;}
}
return false;
}
</script>
<div id="imagePreview"></div>
<br><input type="file" id="recentphoto" class="custom-file-input" name="new_image" accept="image/jpg, image/JPG,image/JPEG, image/jpeg" required="required" onChange="load_image(this.id,this.value)" />
<br />
<br />
</div>