在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

前端文件上傳的幾種交互造輪子

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-07-04 10:39 ? 次閱讀

來源| OSCHINA 社區

作者 | 京東云開發者-京東物流 劉海鼎

背景

前端文件上傳本來是一個常規交互操作,沒什么特殊性可言,但是最近在做文件上傳,需要實現截圖粘貼上傳,去找了下有沒有什么好用的組件,網上提供的方法有,但是沒找完整的組件來支持 cv 上傳,經過了解發現可以用剪貼板功能讓自己的 cv 實現文件上傳,于是自己就整合了目前幾種文件上傳的交互方式,碼了一個支持 cv 的 vue3 文件上傳組件(造個輪子)。

介紹

作為一個完整的組件內容還是挺多的,這里主要介紹下上傳交互中一些主要功能,包括上傳的幾種交互方式, 上傳進度的獲取,上傳類型的限制,默認上傳請求和自定義上傳請求。 以下代碼都是非完整代碼,大家用于參考實現過程,可以通過以下代碼修改來完成自己想要的交互功能。

幾種交互

1,點擊選擇上傳

點擊選擇是最常見的上傳交互,之前原生上傳控件,樣式修改比較麻煩,為了修改上傳樣式,我們可以把該控件設置隱藏,用其他元素通過從 click 交互,來觸發該文件選擇控件。在選擇文件控件上綁定 onchange 事件,該控件在 change 后獲取到文件,然后調用上傳方法,實現如下:

2,拖動上傳

拖拽文件上傳,首先在頁面上建立一個拖放區域,在拖放區域上綁定拖放事件,監聽拖放事件 drop 內容中 datTransfer 中是包含 files, 如果存在 files,獲取 files 然后調用上傳附件方法。 拖放區域可以通過事件 dragover 來檢查拖放文件是否進入拖放區域來設置拖放區域懸浮樣式,通過 dragleave 來檢查離開拖放區取消懸浮樣式。 進行交互提示 實現如下:
+
3,復制上傳(復制檢測區域設置)

復制上傳的交互步驟

?將文件保存到剪貼板:執行鍵盤快捷鍵或者使用鼠標復制

?將鼠標移動到可粘貼區: 判斷是否移動到可粘貼區,來確定是否在執行粘貼后上傳,否則整個頁面都會作為粘貼區

?執行粘貼操作:執行鍵盤粘貼快捷鍵(ctrl+v) 粘貼區綁定 paste 事件,在觸發 paste 事件前將鼠標移到粘貼區,復制會被檢查不在粘貼區,阻止上傳操作,實現如下:

上傳模式

根據以上三種交互,大家可自由組合上傳形式,比如點擊和拖拽,拖拽和粘貼組合等等,我這邊目前按點擊,拖拽,粘貼疊加組合,設置為:

?點擊上傳,click

?拖拽上傳 drag(包括點擊上傳和拖拽上傳)

?粘貼上傳 paste (包括點擊,拖拽和復制上傳)

通過傳參 uploadeMode 設置 (click, drag, paste)

組件設置:

組件應用


    
點擊上傳

文件限制

文件限制包括是否多文件上傳限制 multiple, 上傳數量 limit 限制,上傳類型 accept 限制,這些設置參考了 element-plus 上傳組件,在其基礎上做了簡化。實現如下 multiple 和 accept 首先需要在點擊控件上綁定,以便于在點擊選擇上傳時就能夠過濾對應文件,拖拽上傳和粘貼上傳,無法通過 input [type=file] 組件控制需要在上傳方法中判斷過濾,(以粘貼上傳為例) 組件實現

上傳進度設置

獲取文件上傳進度,使用 ajax 中的 progress 事件監聽機制,回傳數據 loaded 進度,和 ttotal 進行計算,獲取到計算的百分比通過 process 插槽線上在界面上。 具體實現如下: 組件實現 文件限制后執行組件上傳,默認情況下走內置的上傳方法,如果做了自定義,上傳進度也需要自己實現(自己實現過程可以參考內置方法中的實現)

// 上傳方法調用
ajaxUpload({...props, file})
// 上傳方法實現
ajaxUpload = (options) => {
const xhr = new XMLHttpRequest()
    const action = option.action
    console.log(xhr, xhr.upload)
    if (xhr.upload) {
    // 建立progress監聽
      xhr.upload.addEventListener('progress', (evt:any) => {
        const progressEvt = evt
        progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0
        // 回傳進度數據
        option.onProgress(progressEvt)
      })
    }
}

同樣文件上傳成功,異常等方法也可以通過監聽 load 并且判斷 xhr.status 來實現,

xhr.addEventListener('load', () => {
      if (xhr.status < 200 || xhr.status >= 300) {
        return option.onError(getError(action, option, xhr))
      }
      option.onSuccess(getBody(xhr))
})
組件使用 ?配置獲取進度數據回調函數 onProgress ?配置接收回傳的進度數據進行賦值 ?配置進度條插槽顯示進度數據

   
點擊上傳
自定義上傳請求

默認情況下,不需要自定義上傳請求,組件內置了上傳請求,如果個人有需求可以自定義上傳請求,子定義上傳請求,是在文件限制流程后,檢查是否有自定義請求方法,如果存在就將文件傳入自定義請求方法。 組件實現:
// 上傳文件
const uploadFiles = (files) => {
    if (files.length === 0) return
    const { limit, multiple, accept, httpRequest } = props
    // 是否多文件限制,主要用于拖拽和粘貼上傳中
    if (!multiple) {
       files = Array.from(files).slice(0, 1)
    }
    // 文件數量
    if (limit && files.length > limit) {
       /*具體大家需要的邏輯可自行定義*/
       return
    }
    // 文件類型限制
    if (accept) {
       files = filesFiltered(Array.from(files), accept)
    }
    //在文件符合條件后執行上傳方法
    // 自定義上傳方法調用
    if(httpRequest) {
       return httpRequest(files)
    }
 }
組件應用: 注意點: 通過自定義上傳方法實現時,在原來組件上的屬性 action 無效

    
點擊上傳

總結

通過以上可以實現一個支持多種交互方式的文件上傳組件,同時也將 element-plus 中文件上傳的流程做了一個學習,因為該組件的實現過程就是參考了 element-plus 的實現,在 element-plus 上傳的基礎上添加了粘貼上傳交互,該組件的實現重在交互方式,各個樣式風格通過插槽自定義。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 文件
    +關注

    關注

    1

    文章

    570

    瀏覽量

    24822
  • 組件
    +關注

    關注

    1

    文章

    517

    瀏覽量

    17923

原文標題:前端文件上傳的幾種交互造輪子

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙原生應用元服務開發-Web上傳文件

    Web組件支持前端頁面選擇文件上傳功能,應用開發者可以使用onShowFileSelector()接口來處理前端頁面文件
    發表于 05-08 11:17

    上傳文件

    上傳文件必須小于20M嗎?怎樣能上傳大于20M的文件
    發表于 08-10 20:11

    【MYD-Y6ULX申請】語音交互前端信號處理板

    項目名稱:語音交互前端信號處理板試用計劃:申請理由本人在語音交互領域有十年多的學習和開發經驗,是國內早期的wifi音箱/無線多通道語音/語音交互整機方案設計的主導者,對無線音頻/多通道
    發表于 01-22 10:34

    如何利用掃地機輪子制作ROS移動機器人地盤

    制作ROS移動機器人地盤摘要概述硬件需求車體設計電路設計程序設計摘要本教程講述如何利用掃地機輪子制作ROS移動機器人地盤。概述原本不打算自己輪子的,但是網上的移動機器人地盤要么巨貴--對于學生黨
    發表于 01-14 08:36

    基于PHP大文件上傳的研究和設計

    基于PHP大文件上傳的研究和設計,感興趣的可以看看。
    發表于 02-22 18:15 ?6次下載

    基于Iframe內聯框架的異步文件上傳與刪除

    在Weh應用程序開發過程中,文件上傳功能是個很常用又非常重要的功能,它要處理的內容主要包括:如何將上傳文件文件的形式保存到服務器,
    發表于 11-11 10:20 ?5次下載
    基于Iframe內聯框架的異步<b class='flag-5'>文件</b><b class='flag-5'>上傳</b>與刪除

    springMVC后臺接受前端上傳文件及下載文件

    通過MultipartHttpServletRequest對象來接受前端上傳文件
    發表于 11-28 13:33 ?3396次閱讀

    如何在java上傳和下載文件

    文件上傳在web應用中非常普遍,要在jsp環境中實現文件上傳功能是非常容易的,因為網上有許多用java開發的文件
    發表于 11-13 08:00 ?11次下載

    java Web如何實現文件上傳與下載

    文件上傳概述,實現web開發中的文件上傳功能,需完成如下二步操作: 在web頁面中添加上傳輸入項在servlet 中讀取
    發表于 03-06 11:03 ?7次下載
    java Web如何實現<b class='flag-5'>文件</b>的<b class='flag-5'>上傳</b>與下載

    PHP教程之文件系統和服務器的交互資料說明

    本文檔的主要內容詳細介紹的是PHP教程之文件系統和服務器的交互資料說明包括了:1.文件上傳,2.使用目錄函數 ,3.與文件系統的
    發表于 04-18 17:04 ?4次下載
    PHP教程之<b class='flag-5'>文件</b>系統和服務器的<b class='flag-5'>交互</b>資料說明

    HarmonyOS應用開發okhttp3.0快速集合文件上傳

    ? ? ? ? ?應用開發過程中經常需要進行文件上傳功能開發,通過okhttp3.0可以快速集合完成文件上傳的功能。 代碼如下: OkHttpClient http = new
    的頭像 發表于 03-08 10:24 ?1774次閱讀

    使用OkHttp上傳和下載文件時顯示進度庫使用

    核心進展 該庫有助于在使用 OkHttp 上傳和下載文件時顯示進度。 CoreProgress 包括: 使用 OkHttp 下載文件時的進度。 使用 OkHttp 上傳
    發表于 03-24 11:17 ?5次下載

    SpringBoot超大文件上傳,實現秒傳

    當標志位true為上傳已經完成,此時如果有相同文件上傳,則進入秒傳邏輯。如果標志位為false,則說明還沒上傳完成,此時需要在調用set的方法,保存塊號
    的頭像 發表于 11-17 10:30 ?1142次閱讀

    MarkDown文件插入圖片并上傳GitHub

    MarkDown文件插入圖片并上傳GitHub
    的頭像 發表于 01-12 17:02 ?1085次閱讀

    人機交互技術有哪幾種 人機交互技術的發展趨勢

    人機交互技術是指人與計算機之間通過各種交互方式進行信息傳遞、操作和控制的技術。隨著科技的進步,人機交互技術也在不斷發展創新。以下將介紹人機交互技術的
    的頭像 發表于 01-22 17:47 ?4012次閱讀
    主站蜘蛛池模板: 人人干人人干人人干 | 欧美7777kkkk免费看258 | 免费在线色视频 | 亚洲成人伊人网 | 免费在线观看的视频 | 成年女人毛片 | 免费网站看av片 | 可以免费看黄的网址 | 久久天天综合 | 俄罗斯小屁孩cao大人免费 | 男人和女人做免费做爽爽视频 | freesexvideo性欧美tv | 最新黄色在线 | 在线免费观看你懂的 | 亚洲欧洲一区二区三区在线 | 91九色成人 | 中文字幕日韩三级 | 37pao强力打造免费高速高清 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 中文字幕一区在线观看视频 | 91久久精品青青草原伊人 | 欧美456| 亚洲成人高清在线观看 | 国产香蕉久久精品综合网 | 色无欲天天天影视综合网 | 亚洲综合亚洲综合网成人 | 深夜免费视频 | 在线播放色 | 大片免费看 | 手机在线观看免费视频 | 日韩卡1卡2卡三卡四卡二卡免 | 全免费a级毛片免费看不卡 全日本爽视频在线 | 日日爽夜夜 | 岬奈奈美在线 国产一区 | xvideos69日本hd| 欧美成人观看免费全部完小说 | 天堂中文网 | 成人五级毛片免费播放 | 日韩a视频| 日本资源在线观看 | 免播放器av少妇影院 |