最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript獲取上傳文件相關(guān)信息示例詳解

 更新時間:2022年08月26日 09:11:24   作者:下落香樟樹  
這篇文章主要為大家介紹了JavaScript獲取上傳文件相關(guān)信息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前題場景

在開發(fā)過程中,文件上傳是再熟悉不過的場景了,但是根據(jù)實際使用情況對上傳文件的限制又各有不同。需要對本地上傳文件進行相應(yīng)的限制處理,防止不符合規(guī)則或者要求的文件上傳到云存儲中,從而造成云盤資源空間浪費。

與此同時,也在給客戶端使用文件信息之前做了一次數(shù)據(jù)過濾處理,減少客戶端對文件資源的處理和校驗。

處理方式

因為客戶端使用后臺管理上傳的圖片文件和音頻文件時,為了優(yōu)化展示效果和加載的速度,所以在后臺管理系統(tǒng)上傳處希望依據(jù)圖片文件的寬高比例對文件大小做下相應(yīng)的限制;

同時對上傳的音頻文件要依據(jù)音頻文件的時長做些相應(yīng)的限制,比如:在指定時長范圍內(nèi)的音頻文件的文件大小做下對應(yīng)的限制,符合要求文件大小的文件可以上傳到云服務(wù)器,不符合要求的就要進行相應(yīng)的文件上傳攔截,并作出對應(yīng)的提示,以便于使用者在操作上傳文件時候可以依據(jù)指定的提示去篩選出符合要求的文件。

圖片文件

通過創(chuàng)建圖片文件對象來加載文件流的方式來獲取圖片文件的寬度和高度。

??有些情況下需要單獨處理,把其他格式類型的文件通過強制修改后綴名的方式來達到轉(zhuǎn)換文件的目的,此種方式最終會通過“image.onerror”事件來輸出錯誤,在使用過程中可以使用該方法做下攔截處理。

/**
 * @description 獲取圖片寬度和高度
 * @param {Object} file 圖片文件對象
 * @return {Object} {width: number, height: number} 圖片寬度和高度
 *  */
const getImageRadio = file => {
    return new Promise((resolve, reject) => {
        // 創(chuàng)建讀取文件對象
        const reader = new FileReader();
        // 讀取文件對象
        reader.readAsDataURL(file);
        // 文件對象加載完成
        reader.onload = () => {
            // 創(chuàng)建image對象
            const imageEl = new Image();
            // 賦值src地址
            imageEl.src = reader.result;
            // 圖片加載成功
            imageEl.onload = () => {
                let imgWH = {
                    with: imageEl.width,
                    height: imageEl.height
                };
                return resolve(imgWH);
            };
            // 圖片加載失敗
            imageEl.onerror = () => {
                return reject(null);
            };
        };
        // 文件對象加載失敗
        reader.onerror = () => {
            return reject(null);
        };
    });
};

音頻文件

通過創(chuàng)建音頻文件流的方式來獲取音頻文件的時長「視頻文件流同樣適用此方法」

??有些情況下就是那其他格式類型的文件通過轉(zhuǎn)換或者強制修改文件后綴名的方式來達到轉(zhuǎn)換文件類型的目的,此方法在測試環(huán)節(jié)可能會出現(xiàn),但是在平時使用過程過出現(xiàn)的概率不是很大,但是防止粗心的人或者其他用意的人采用此種方式,因此需要對失敗事件“audioEl.onerror”進行監(jiān)聽,來優(yōu)化判斷邏輯,減少問題出現(xiàn)。

/**
 * @description 獲取音頻文件時長
 * @param {Object} file 音頻文件對象
 * @return {Number}  duration 時長
 *  */
const getAudioDuration = file => {
    return new Promise((resolve, reject) => {
        // 創(chuàng)建URL對象
        const audioURL = URL.createObjectURL(file);
        // 創(chuàng)建audio對象
        const audioEl = new Audio(audioURL);
        // 元數(shù)據(jù)加載觸發(fā)事件
        audioEl.onloadedmetadata = () => {
            // 讀取文件音頻時長
            const duration = audioEl.duration;
            return resolve(duration);
        };
        // 元數(shù)據(jù)加載失敗
        audioEl.onerror = () => {
            return reject(null);
        };
    });
};

判斷處理

此處只是做了基礎(chǔ)的邏輯判斷,后續(xù)若有其他需求,可以根據(jù)自身實際需求場景進行相應(yīng)的修改;

此處封裝的兩個異步函數(shù)方法“獲取圖片文件的寬度和高度”和“獲取音頻文件的時長”,對基礎(chǔ)格式的校驗比較簡單,后續(xù)可以根據(jù)實際情況做修改。

若是采用獲取文件流的方式來獲取想要的文件類型信息,建議采用“異步”的方式來加載文件。

/**
 * @description 判斷文件類型
 * @param {Object} file 文件對象
 * @return {Object} file
 *  */
const checkFile = async file => {
    // 獲取文件大小
    const fileSize = file.size || 0;
    // 獲取文件類型
    const fileType = file.type;
    let isImage = false;
    let isAudio = false;
    // 判斷文件類型
    if (fileType.includes("image/")) {
        // 圖片文件
        if (fileType === "image/png") {
            // png圖片
            isImage = true;
        }
    } else if (fileType.includes("audio/")) {
        // 音頻文件
        if (fileType.includes("audio/mpeg")) {
            // mp3
            isAudio = true;
        }
    }
    // 判斷圖片
    if (isImage) {
        let imgRes = await getImageRadio(file);
    }
    // 判斷音頻
    else if (isAudio) {
        let audioRes = await getAudioDuration(file);
    }
    // 其他格式
    else {
      // 其他格式文件
    }
};

分析總結(jié)

通過此次文件上傳處理分析,可以依據(jù)文件后綴名判斷指定的文件格式類型,也可以通過上傳的文件對象file.type”來獲取文件類型。

兩種方式都可以處理文件類型,早期開發(fā),主要是通過判斷文件后綴名的方式來區(qū)分文件類型,有些時候命名格式有些不規(guī)范,處理起相對來說容易出現(xiàn)差錯。

此次判斷采用的文件file對象的方式來判斷文件類型。相對來說,文件后綴名方式判斷文件類型比文件對象“file.type”方式獲取文件類型來說稍微簡單點,也容易判斷些,但是在明明不規(guī)范的情況下容易產(chǎn)生問題。

總之來說,兩種判斷方式各有利弊,在使用過程中,可以根據(jù)自己的實際開發(fā)情況來決定采用哪種方式。

以上就是JavaScript獲取上傳文件相關(guān)信息示例詳解的詳細內(nèi)容,更多關(guān)于JavaScript獲取上傳文件信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序報錯:this.setData is not a function的解決辦法

    微信小程序報錯:this.setData is not a function的解決辦法

    這篇文章主要介紹了微信小程序報錯:this.setData is not a function的解決辦法的相關(guān)資料,希望通過本文能幫助到大家解決這樣類似的問題,需要的朋友可以參考下
    2017-09-09
  • JavaScript與JQuery框架基礎(chǔ)入門教程

    JavaScript與JQuery框架基礎(chǔ)入門教程

    這篇文章主要介紹了jQuery和JavaScript入門基礎(chǔ)知識學(xué)習(xí)指南,jQuery是當(dāng)下最主流人氣最高的JavaScript庫,需要的朋友可以參考下
    2021-07-07
  • js 標(biāo)簽語法使用詳情

    js 標(biāo)簽語法使用詳情

    這篇文章主要介紹了js 標(biāo)簽語法使用,在 JavaScript 中提供了標(biāo)簽語句,用于標(biāo)記指定的代碼塊,便于跳轉(zhuǎn)到指定的位置。本文來記錄一下標(biāo)簽語句的使用方法,需要的朋友可以參考一下
    2021-10-10
  • 微信小程序 設(shè)置啟動頁面的兩種方法

    微信小程序 設(shè)置啟動頁面的兩種方法

    這篇文章主要介紹了 微信小程序 設(shè)置啟動頁面的方法的相關(guān)資料,這里對設(shè)置啟動頁面的兩種方法分別介紹,需要的朋友可以參考下
    2017-03-03
  • javascript對象3個屬性特征

    javascript對象3個屬性特征

    這篇文章主要介紹了javascript對象3個屬性特征,writable可寫、enumerable可枚舉、configurable可配置,下面來看看文章的詳細內(nèi)容吧
    2021-11-11
  • 定時器在頁面最小化時不執(zhí)行實現(xiàn)示例

    定時器在頁面最小化時不執(zhí)行實現(xiàn)示例

    這篇文章主要為大家介紹了定時器在頁面最小化時不執(zhí)行的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • JS 4個超級實用的小技巧 提升開發(fā)效率

    JS 4個超級實用的小技巧 提升開發(fā)效率

    JS有很多小技巧可以使代碼更精簡、更簡單。今天主要分享4個技巧,在平時的工作中可以大大的縮短代碼量和開發(fā)時間。,需要的朋友可以參考下面文章內(nèi)容喲
    2021-09-09
  • 詳解requestAnimationFrame和setInterval該如何選擇

    詳解requestAnimationFrame和setInterval該如何選擇

    這篇文章主要為大家介紹了requestAnimationFrame和setInterval該如何選擇示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-03-03
  • Javascript 小技巧全集

    Javascript 小技巧全集

    Javascript 小技巧全集...
    2006-06-06
  • 微信小程序 石頭剪刀布實例代碼

    微信小程序 石頭剪刀布實例代碼

    這篇文章主要介紹了微信小程序 石頭剪刀布實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評論

札达县| 洪江市| 宁夏| 黎平县| 灵武市| 伊春市| 汝城县| 台前县| 靖西县| 吴桥县| 漳平市| 揭阳市| 诏安县| 新疆| 安庆市| 栖霞市| 汽车| 泽库县| 全南县| 松阳县| 芷江| 鹤庆县| 郯城县| 固阳县| 徐水县| 桐梓县| 台州市| 莎车县| 五指山市| 蕉岭县| 泰安市| 定陶县| 化州市| 蒙阴县| 平和县| 南宁市| 务川| 嘉定区| 苏州市| 鄂伦春自治旗| 区。|