上传文件夹时使用的代码为
uploadOk.value.$el.querySelector(".el-upload__input")["webkitdirectory"] = true
对dom元素添加webkitdirectory属性。
当选中文件后,会在file对象中生成一个webkitRelativePath的值。webkitRelativePath会包含文件夹的对应路径,但是进行上传时会因为这个值导致报错,报跨域的错误。
const formdata = new FormData()
upLoadFileList.value.forEach((file, index) => {
// 上传文件夹时若是webkitRelativePath有值,则会报跨域错误
// 创建一个新的 Blob 对象,它包含原始 File 的数据
const blob = new Blob([file.raw], { type: file.raw.type });
// 使用新的 Blob 对象和原始 File 的其他属性来创建一个新的 File 对象
// 注意:webkitRelativePath 将不会设置,因为它是一个只读属性
const newFile = new File([blob], file.raw.name, {
type: file.raw.type,
lastModified: file.raw.lastModified
})
formdata.append('files', newFile)
// 修改文件状态
file.status = 'uploading'
})
以上代码将文件对象中的webkitRelativePath值替换,之后可以正常做到文件夹上传。
webkitRelativePath的值无法直接修改,只能替换掉了。