我使用库来处理我的上传,这是通过composer安装的。
该库名为FileUpload。
正如您从文档中看到的那样,库的三个部分是抽象的,因此您可以根据需要创建自己的自定义类。
"路径解析器,验证器和文件系统的原因 是抽象的,所以你可以自己编写,满足自己的需求 (还有,用于单元测试)。图书馆附带了一堆 "简单"适合基本需求的实现。你可以写一个 例如,与Amazon S3一起使用的文件系统实现。"
这很好,但我需要覆盖this类上的函数。
<?php
namespace FileUpload;
class File {
/**
* Preset no errors
* @var mixed
*/
public $error = 0;
/**
* Preset unknown mime type
* @var string
*/
public $type = 'application/octet-stream';
/**
* Is the file completely downloaded
* @var boolean
*/
public $completed = false;
/**
* Determine file type from path (actual mime type, not extension checking)
* @param string $path
*/
public function setTypeFromPath($path) {
$this->type = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path);
}
/**
* Does this file have an image mime type?
* @return boolean
*/
public function isImage() {
return in_array($this->type, array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png'));
}
}
我需要覆盖的函数是:setTypeFromPath()。 此函数使用php函数来获取文件的实际mime类型。
finfo_file,这适用于图像和标准文档但是当我尝试上传压缩文档时,例如docx,potx它没有通过我的验证,因为mime类型作为应用程序返回/拉链。
我的验证:
$validator = new FileUpload\Validator\Simple(1024 * 1024 * 10, array(
'application/msword',
'application/word',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
'application/pdf',
'application/x-pdf',
' application/acrobat',
'applications/vnd.pdf'
), $_REQUEST);