系统:Yii2, Windows 10
。
音频文件上传验证规则:
public function rules()
{
return [
[['audioFile'], 'file', 'extensions' => 'mp3, m4a', 'skipOnEmpty' => false],
];
}
public function upload()
{
if ($this->validate()) {
$this->audioFile->saveAs('m_upload/audio/' . $this->audioFile->baseName . '.' . $this->audioFile->extension);
return true;
} else {
return false;
}
}
我注意到有些 mp3 文件经过验证并上传到服务器,有些没有通过。在第二种情况下,我没有在表单中收到错误,页面只是重新加载。
由于删除 check 参数消除了extensions
“不上传”文件到服务器的问题,我得出的结论是,原因与特定的 mp3 文件和/或检查它们有关。
因此,验证有效,当设置为extensions
任意值时,例如,aaamp3
表单会发出有关不适当文件格式的通知。
假设文件以某种方式损坏并且没有通过验证(尽管音频播放器正确处理它们),但为什么没有发生错误呢?谁能建议这种行为的原因是什么?
默认情况下,在上传文件时,会在文件 /validators/FileValidator.php 中检查文件扩展名是否符合其 MIME 类型(似乎 exe 已重命名为 doc 并上传)
您可以禁用检查并指定有效的 MIME 类型: