當使用 input(type='file', webkitdirectory)
選取目錄下的檔案時,預設會連子目錄下的檔案一起選取,該如何不選取子目錄下的檔案呢 ?
Version
Vue 3.0.11
Point-free
<template lang='pug'>
input(@input='onInput', ref='fileUpload', type='file', webkitdirectory)
</template>
<script setup>
import { ref } from 'vue'
import { read } from 'vue3-fp'
import { pipe, filter, prop, split, length, ifElse, equals, T, F } from 'ramda'
import { log } from 'wink-fp'
let fileUpload = ref (null)
let onlyRootDir = pipe (
prop ('webkitRelativePath'),
split ('/'),
length,
ifElse (equals (2)) (T) (F)
)
let onInput = pipe (
read (fileUpload),
prop ('files'),
filter (onlyRootDir),
log
)
</script>
第 2 行
input(@input='onInput', ref='fileUpload', type='file', webkitdirectory)
當要選擇目錄下,要使用 webkitdirectory
。
20 行
let onInput = pipe (
read (fileUpload),
prop ('files'),
filter (onlyRootDir),
log
)
使用 pipe()
組合 onInput()
:
read (fileUpload)
:讀取fileUpload
refprop ('files')
:讀取files
propfilter (onlyRootDir)
:過濾不選擇子目錄檔案log
:寫入console.log()
13 行
let onlyRootDir = pipe (
prop ('webkitRelativePath'),
split ('/'),
length,
ifElse (equals (2)) (T) (F)
)
使用 pipe()
組合 onlyRootDir()
:
prop ('webkitRelativePath')
:讀取webkitRelative
propsplit ('/')
:由/
分割成 Arraylength
:取得 Array 的 lengthifElse (equals (2)) (T) (F)
:若 length 只有2
,表示只有根目錄,否則為子目錄
Conclusion
- HTML 並沒有 attribute 可設定不取得子目錄檔案,但可由判斷
/
個數確認是否為子目錄檔案