提问人:Robin Dalmy 提问时间:11/8/2023 更新时间:11/8/2023 访问量:29
在 NextJs 中使用 Yup 验证文件输入
Validate File input using Yup in NextJs
问:
我在 yup 架构中有一个可选的文件输入,我想验证它的大小和文件类型。问题是 HTML 输入类型文件正在向测试函数发送一个 Files 数组,并且它弄乱了架构,因为 medicalConcernDocument 在我的界面中应该只为 File 类型。下面是文件是的架构
const schema: up.ObjectSchema<PersonalDetailsFormInterface> = yup.object().shape({
...,
medicalConcernDocument: yup
.mixed<File>()
.nullable()
.test(
'check-file-size',
`File size cannot exceed ${maxFileSizeInMB}MB`,
checkFileSize
)
.test(
'check-file-type',
`File is unsupported, supported files: ${supportedFileTypeMessage}`,
checkFileType
),
});
checkFileSize 和 checkFileType 位于如下所示的实用程序文件中:
export function checkFileSize(files: File[] | null | undefined): boolean {
const file = getFile(files);
if (!file) {
return true;
}
const fileSizeInBytes = file.size;
const fileSizeInMB = Math.round(fileSizeInBytes / 1024 / 1024);
return (fileSizeInMB <= maxFileSizeInMB);
}
export function checkFileType(files: File[] | null | undefined): boolean {
const file = getFile(files);
if (!file) {
return true;
}
return supportedFileTypes.includes(file.type);
}
现在我知道我可以轻松地将 checkFileSize/checkFileType 参数设置为 files: any,然后将 any 设置为 File[],如下所示:
export function checkFileSize(files: any | null | undefined): boolean {
const file = getFile(files as File[]);
if (!file) {
return true;
}
...
}
但是有没有更好的方法可以做到这一点呢?
答: 暂无答案
评论
.transform
.transform
.mixed
.transform(files => files[0])
.transform