技術(shù)頻道導航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

input type="file" 文件選擇器按鈕只允許選擇圖片的6種方法

作者:admin    時間:2023-4-17 20:36:9    瀏覽:

能否通過<input type="file">標簽只允許上傳圖像文件?

現(xiàn)在,它接受所有文件類型。但是,想將其限制為僅特定的圖像文件擴展名,包括.jpg、.gif等。

如何實現(xiàn)此功能?本文介紹一些實現(xiàn)的方法。

 <input type="file">文件選擇器按鈕只允許選擇圖片的6種方法

1、使用accept

使用輸入標記的accept屬性,若想只接受PNG、JPEG和GIF,可以使用以下代碼:

<input type="file" name="myImage" accept="image/png, image/gif, image/jpeg" />

或者簡單地

<input type="file" name="myImage" accept="image/*" />

也可以使用這個

<input type="file" accept=".png, .jpg, .jpeg" />

請注意,這只會向瀏覽器提供向用戶顯示哪些文件類型的提示,但這很容易避免,因此你也應該始終在服務器上驗證上傳的文件。

它應該適用于IE 10+、Chrome、Firefox、Safari 6+、Opera 15+,據(jù)一些報道,這實際上可能會阻止一些手機瀏覽器上傳任何內(nèi)容,所以一定要測試好你的目標平臺。

2、使用JavaScript

步驟:

  1. accept屬性添加到輸入標記
  2. 使用javascript進行驗證
  3. 添加服務器端驗證,以驗證內(nèi)容是否真的是預期的文件類型

對于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屬性過濾將在文件選擇器彈出窗口中顯示的文件。然而,這并不是一種驗證。這只是對瀏覽器的一個提示。用戶仍然可以更改彈出窗口中的選項。

javascript只驗證文件擴展名,但無法真正驗證所選文件是實際的jpg還是png。

因此,你必須在服務器端編寫文件內(nèi)容驗證。

檢查圖像文件是真實圖像還是偽造圖像(PHP):

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;
    }
}

3、使用TypeScript檢查文件是否真的是一個圖像

使用type="file"accept="image/*"(或你想要的格式),允許用戶選擇具有特定格式的文件,但你必須在客戶端重新檢查,因為用戶可以選擇其他類型的文件。

HTML

<input #imageInput accept="image/*" (change)="processFile(imageInput)" name="upload-photo" type="file" id="upload-photo" />

TypeScript

processFile(imageInput) {
    if (imageInput.files[0]) {
      const file: File = imageInput.files[0];
      var pattern = /image-*/;

      if (!file.type.match(pattern)) {
        alert('Invalid format');
        return;
      }

      // 在這里,你可以對你的圖像做任何事情?,F(xiàn)在你確定它是一個圖像。
    }
}

這是最好的方法,因為它可以檢查文件是否真的是一個圖像,而不需要開發(fā)人員指定他們想要允許的所有不同的擴展名。

請注意,這不是JS,而是typescript。如果你想在javascript文件中使用它,你必須省略類型定義(:file)。

4、所有跨瀏覽器圖片類型

補充一點:如果你想包括所有具有最佳跨瀏覽器支持的現(xiàn)代圖像文件類型,它應該是:

<input type="file" accept="image/apng, image/avif, image/gif, image/jpeg, image/png, image/svg+xml, image/webp">

這允許在大多數(shù)瀏覽器中顯示所有圖像文件類型,同時排除TIFF等不太常見的格式或PSD等不適合網(wǎng)絡的格式。

5、動態(tài)判斷文件類型

你可以添加特定類型的圖像或其他文件類型,并在代碼中進行驗證:

HTML

<input  style="margin-left: 10px; margin-top: 5px;" type="file" accept="image/x-png,image/jpeg,application/pdf"
                (change)="handleFileInput($event,'creditRatingFile')" name="creditRatingFile" id="creditRatingFile">

JavaScript

handleFileInput(event) {
    console.log(event);
    const file = event.target.files[0];
    if (file.size > 2097152) {
        throw err;
    } else if (
      file.type !== "application/pdf"  &&
      file.type !== "application/wps-office.pdf"   && 
      file.type !== 'application/pdf'  && file.type !== 'image/jpg'  && file.type !== 'image/jpeg'  && file.type !== "image/png"
    ) {
throw err;
    } else {
      
        console.log('file valid')
    }
}

6、ReactJS

為ReactJS重構(gòu)了其他人的答案(鉤子)。

import React from 'react';

const ImageUploader = () => {

    const handleImageUpload = (e) => {
        // If no file selected, return
        if (e.target.files.length === 0) return false;
        const file = e.target.files[0];

        // If no image selected, return
        if (!/^image\//.test(file.type)) {
            alert(`File ${file.name} is not an image.`);
            return false;
        }

        // ...
    };

    return (
        <>
            <input type='file' accept='image/*' onChange={(e) => handleImageUpload(e)} />
        </>
    );
};

export default ImageUploader;

總結(jié)

本文介紹了6種 <input type="file">文件選擇器按鈕只允許選擇圖片的方法,選擇適合自己的方法,有的應用場景不一定需在服務器端再次驗證。

相關(guān)文章

x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */