我正在用angular在ASP.net网页上上传文件,想问一下如何检查上传的文件是pdf还是jpg,最大2MB。如果不是这样,应该有一个简单的文本显示,文件不应该被上传/在文件列表中列出。我可以在前端/Ts中做到这一点吗?
您可以利用File API。假设您正在使用类型为file
的<input>
,您可以提取files
属性
要验证字段,执行此逻辑(inputRef
是对input
元素的引用,可以通过document.getElementById
或您正在使用的框架提供的任何函数来检索)
if (!inputRef.files || inputRef.files.length === 0) {
console.error("No files uploaded");
} else {
const file = inputRef.files[0];
if (['application/pdf', 'image/jpeg'].includes(file.type)) {
console.error('File should be a pdf or a jpeg');
} else if (file.size > 2e+6) {
console.error('File is too large. Over 2MB');
} else {
console.log('File is valid');
}
}
请注意,size
是可信的,type
是由扩展派生的,因此,如果用户重命名一个文件,这个检查仍然可以避免。
关于前端验证的警告
使用前端验证只为了提高可用性,而不是为了安全性和完整性。您应该检查文件大小和内容在后端。因为文件扩展名(和派生的MIME类型)永远不可信,所以文件可以重命名。
作为一般的经验法则,如果文件不被服务器系统使用(而只是存储),并且从未呈现给除上传程序本身以外的其他用户,则可以避免验证文件内容。否则,内容可能会损坏(甚至更糟),并可能降低系统的可用性。
可能重复