使用express-fileupload无表单上传图片时获取文件名遇TypeScript类型错误
解决express-fileupload TypeScript类型错误:获取上传文件名
TypeScript报错的核心原因是:req.files.file的类型被定义为UploadedFile | UploadedFile[]——组件允许上传单个或多个同名文件,因此直接访问.name会触发类型校验失败(数组类型没有name属性)。
以下是两种场景的解决方案:
场景1:仅处理单个文件上传
如果确定业务中只会上传单个文件,可以通过两种方式明确类型:
方式1:类型断言
直接告知TypeScript当前是单个文件类型:
const uploadedFile = req.files.file as UploadedFile; const filename = uploadedFile.name; const mimeType = uploadedFile.mimetype;
方式2:类型守卫(更安全)
通过判断排除数组类型,避免意外场景报错:
const uploadedFile = req.files.file; if (!Array.isArray(uploadedFile)) { const filename = uploadedFile.name; const mimeType = uploadedFile.mimetype; // 执行后续文件处理逻辑 } else { console.error("预期上传单个文件,实际收到多个"); // 可添加错误处理逻辑 }
场景2:兼容单个/多个文件上传
如果需要同时支持两种上传场景,统一遍历处理:
const uploadedFiles = req.files.file; const filenames: string[] = []; const mimeTypes: string[] = []; if (Array.isArray(uploadedFiles)) { uploadedFiles.forEach(file => { filenames.push(file.name); mimeTypes.push(file.mimetype); }); } else { filenames.push(uploadedFiles.name); mimeTypes.push(uploadedFiles.mimetype); } // 后续可通过filenames数组处理所有上传文件的名称
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

