我正在创建一个文件上传控制器,将一堆XML文件上传到服务器。
但是,某些XML文件没有<xml version="1.0" encoding="UTF-8">
标记,并且Yii验证程序无法上传这些文件。
public $xmlFiles;
public function rules() {
return [
[['xmlFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xml', 'maxFiles' => 20],
];
}
public function upload($path) {
if (empty($path)) {
return false;
}
FileHelper::createDirectory($path);
if ($this->validate()) {
foreach ($this->xmlFiles as $file) {
$file->saveAs($path . $file->baseName . '.' . $file->extension);
}
return true;
}
else {
return false;
}
}
如何更改验证规则以允许此类文件?
答案 0 :(得分:0)
您始终可以在验证规则中将checkExtensionByMimeType
设置为false
,看看它是否有帮助。
这个强制验证器不会将MIME类型与文件扩展名进行比较,因此有些文件可以传递(如纯文本* .csv文件或可能是* .xml文件)。请注意,使用此选项,用户只能通过重命名其扩展名向您发送任何恶意文件。
修改强>
您可以将规则中的mimeTypes
属性设置为您希望有效的所有MIME类型。在你的情况下,它可能是这样的:
['xmlFiles', 'file', 'skipOnEmpty' => false, 'mimeTypes' => ['application/xml'], 'maxFiles' => 20],
删除extensions
属性时,仅检查MIME类型。
虽然在你的情况下MIME类型只是text/plain
是可能的(你应该先检查一下)。你可以在这里设置它,但它将允许所有纯文本文件,它仍然比允许所有内容更好。