使用element组件库实现upload文件夹上传并保存目录结构(获取文件夹名称、文件目录结构等信息)

252 阅读1分钟

Element UI组件库实现upload文件夹上传

最近有个一个需求,需要上传文件夹以及文件夹中的文件,并且上传文件包含原始的目录结构,例如:text/text001/001.jpg(文件夹结构),上传时选取text文件夹,点击后获取上传文件001.jpg,上传信息:new FormData({'file': file, 'fileUrl': text/text001/001.jpg})

1. 开启el-upload组件的文件夹上传功能

  • uplaod组件添加ref属性 <el-upload ref="fileUpload" />
  • 获取上传组件内部 input标签 并将其webkitdirectory属性设置为true
// 页面加载时执行, 开启文件夹上传功能
onMounted(() => {
	nextTick(() => {
		if (props.type === 'fileUploader' && fileUpload.value && fileUpload.value.$el.querySelector('input')) {
			fileUpload.value.$el.querySelector('input').webkitdirectory = true;
		}
	});
});

使用el-upload的http-request属性获取文件属性

  • 增加http-request上传钩子
<el-upload ref="fileUpload" :action="url" :http-request="handleUploadRequest">
  • 获取钩子函数回传文件数据
const handleUploadRequest = (options: any) => {
	const formData = new FormData();
	const file = options.file;
	const filePath = file.webkitRelativePath;
	// 获取上传文件的文件夹路径
	let lastSlashIndex = filePath.lastIndexOf('/');
	let result = filePath.substring(0, lastSlashIndex);
	bucketName.value = result
	formData.append('file', file);
	formData.append('bucketName', bucketName.value.replace(/\/\/+/g, "/"));
	upload(formData).then((response) => {
            // console.log('response', response);
            // 上传成功处理
            handleUploadSuccess(response, file);
            }).catch((error) => {
                // 上传失败处理
                handleUploadError();
            });
};