Как ограничить мой input type="file", чтобы принимать только файлы изображений png, не работающие в Firefox
Я использую input type="file", теперь мое требование состоит в том, что я хочу только выбрать png-изображения, то есть когда я выбираю просмотр фильтра "png", следует применять.
Я упомянул www.w3schools.com/tags/att_input_accept.asp
, а ниже - код, который я использую, это отлично работает с Chrome, но не работает с Firefox и IE.
Пожалуйста, помогите мне понять, что я должен делать неправильно?
<h2>Below uses accept="image/*"</h2>
<input type="file" name="pic1" accept="image/*" />
<h2>Below I need to accept only for png</h2>
<input type="file" name="pic1" accept="image/png" />
Вот ссылка на него http://jsfiddle.net/Jcgja/2/
Ответы
Ответ 1
Вам нужно проверить его с помощью java script. Ниже приведен код для проверки java script
function CheckFileName() {
var fileName = document.getElementById("uploadFile").value
if (fileName == "") {
alert("Browse to upload a valid File with png extension");
return false;
}
else if (fileName.split(".")[1].toUpperCase() == "PNG")
return true;
else {
alert("File with " + fileName.split(".")[1] + " is invalid. Upload a validfile with png extensions");
return false;
}
return true;
}
Ответ 2
Информация о поддержке браузера на этой странице w3schools неверна.
Если вы проверите эту страницу, вы увидите, что атрибут accept
, который он не реализовал в Firefox:
https://developer.mozilla.org/en/HTML/Element/Input
Обновление:
Атрибут accept
теперь реализован в Firefox, но у пользователей, у которых нет последней версии, по-прежнему не будет поддержки.
Ответ 3
Как вы можете видеть, атрибут "accept" не поддерживается должным образом ни одним из основных браузеров. Вы можете использовать проверку javascript в событии onsubmit формы, чтобы проверить правильность типа файла, в противном случае возвращает false.
Не используйте этот атрибут в качестве инструмента проверки. Загрузка файлов должна быть проверена на сервере.
Ответ 4
<?php
if ((($_FILES["pic1"]["type"] == "image/png")
{
if ($_FILES["pic1"]["error"] > 0)
{
echo "Error: " . $_FILES["pic1"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["pic1"]["name"] . "<br />";
echo "Type: " . $_FILES["pic1"]["type"] . "<br />";
echo "Size: " . ($_FILES["pic1"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["pic1"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
Это всего лишь проверка типа файла. Не полная загрузка script.
Ответ 5
вы можете использовать функцию javascript onChane событие файловой функции
filesChange() {
checkFile();
}
<script type="text/javascript">
function checkFile() {
var fileElement = document.getElementById("uploadFile");
var fileExtension = "";
if (fileElement.value.lastIndexOf(".") > 0) {
fileExtension = fileElement.value.substring(fileElement.value.lastIndexOf(".") + 1, fileElement.value.length);
}
if (fileExtension == "gif") {
return true;
}
else {
alert("You must select a GIF file for upload");
return false;
}
}
Ответ 6
Как указано в комментариях, принятое решение не будет работать с именем файла с несколькими ".". в этом. Это должно справиться с этим лучше, оно более надежное и гибкое, а вы можете управлять принятыми расширениями, редактируя массив.
function checkFileExtension() {
var fileName = document.getElementById("uploadFile").value;
if(!fileName)
return false;
var extension = fileName.split(".");
if(extension && extension.length > 1){
extension = [extension.length-1].toUpperCase();
if (["PNG"].indexOf(extension) != -1)
return true;
else{
alert("Browse to upload a valid File with png extension");
return false;
}
}
else{
alert("Browse to upload a valid File with png extension");
return false;
}
}