craigh/file-uploader

允许通过网页表单上传文件

1.0.3 2017-03-29 13:11 UTC

This package is auto-updated.

Last update: 2024-09-12 02:12:45 UTC


README

Build Status

一个易于配置的文件上传器,可通过网页表单上传文件

特性

  • 设置接受的文件类型
  • 阻止不受欢迎的文件类型
  • 设置最大文件大小
  • 如果不存在,可选自动创建上传目录
  • 可选覆盖文件
  • 可选自动创建唯一的文件名
  • 文件名清理

安装

最简单的方法是通过Composer安装

composer require craigh/file-uploader

或者您可以将 craigh/file-uploader 添加到您的 composer.json 文件中并运行 composer update

注意: FileUploader 需要 symfony/HttpFoundation,所以如果您没有使用 composer,您需要确保您的包含路径中有这个库。

使用方法

FileUploader 需要 Symfony\Component\HttpFoundation\File\UploadedFile 对象。您可以通过将 $_FILES['Your_field_name'] 变量传递到 Humps\FileUploader\File 类上的 getUploadedFile() 方法来轻松检索一个实例

$file = Humps\FileUploader\File::getUploadedFile($_FILES['file']);

然后可以将它传递到 FileUploader

$uploader = new Humps\FileUploader\FileUploader($file);

然后您可以按照以下方式上传文件

$uploader->upload();

选项

uploadDir(string)

设置上传路径。如果没有设置,它也将附加任何所需的 '/',所以 'path/to/dir' 和 'path/to/dir/' 都可以工作(默认为当前目录)

$uploader->uploadDir('path/to/dir');

overwrite(boolean)

设置为 true 以允许覆盖具有相同名称的文件(默认:false)

$uploader->overwrite(true);

allowedMimeTypes(array)

传入一个允许的 MIME 类型的数组,其他所有内容都将被阻止。当为空时,除非明确阻止,否则将允许所有文件类型。

$uploader->allowedMimeTypes(['image/jpeg','image/png', 'image/gif']);

blockedMimeTypes(array)

如果您愿意,也可以阻止文件类型。传入您想要阻止的 MIME 类型的数组

$uploader->blockedMimeTypes(['application/x-msdownload']);

maxFileSize($size, $unit)

您想要允许的最大文件大小,期望大小为数字,单位为以下之一

  • B - 字节
  • KB - 千字节
  • MB - 兆字节

$uploader->maxFileSize(5, 'MB');

如果您愿意,也可以使用单词 BYTE,BYTES,KILOBYTE,KILOBYTES,MEGABYTE 或 MEGABYTES

$uploader->maxFileSize(1, 'MEGABYTE');

createDirs(bool)

如果设置为 true,这将递归地创建任何指定的目录,如果它们不存在(默认:false)

$uploader->createDirs(true);

makeFilenameUnique(bool)

如果设置为 true,这将通过在末尾附加 _{number} 来使文件名唯一。

$uploader->makeFilenameUnique(true);

filename(string)

默认情况下,文件名将是上传文件名的清理版本。如果您想设置自己的文件名,请使用此方法。

$uploader->filename('myFile.txt');

注意: 当使用此方法时,文件名不会进行清理,如果您想清理文件名,可以使用 sanitizeFilename() 方法。

sanitizeFilename()

通过删除任何非字母数字字符并用下划线替换空格来清理给定的文件名。只有当您想使用 filename() 方法设置自己的文件名时,才需要调用此方法,否则将自动调用此方法。您还应该意识到,此调用需要在您设置文件名之后进行。

$uploader->filename('my%$crazy@filename.txt')->sanitizeFilename();
upload()

上传文件并返回上传路径。

$uploadPath = $uploader->upload();

upload() 是 move() 的别名,因此如果您觉得 move() 的措辞更合适,也可以使用 move() 方法。

$uploadPath = $uploader->move();

链式调用

所有上述方法都可以链式调用,以实现简洁的语法。

use Humps\FileUploader\File;
use Humps\FileUploader\FileUploader;

$file = File::getUploadedFile($_FILE['file']);
$uploader = new FileUploader($file);
$uploader->uploadPath->('files')->overwrite(true)->upload();

甚至

use Humps\FileUploader\File;
use Humps\FileUploader\FileUploader;

$file = File::getUploadedFile($_FILE['file']);
$uploader = (new FileUploader($file))->upload();

通过扩展 FileUploader 类进行配置

为了更干净地配置上传,您可以扩展 FileUploader 类,这将使您能够访问受保护的变量,例如。

use Humps\FileUploader\FileUploader;

class ImageUploader extends FileUploader{

	protected $allowedMimeTypes = [
		'image/jpeg',
		'image/png',
		'image/gif'
	];
  
	protected $maxFileSize = 5e+6; // In bytes (this is 5MB or 5000000 bytes)
	protected $makeFilenameUnique = true;
	protected $createDirIfNotExists = true;
}

这可以如下使用

use Humps\FileUploader\File;

$image = File::getUploadedFile($_FILE['image']);
$uploader = new ImageUploader($image);
$image->upload();

以下变量是受保护的,因此可以被子类设置

protected $uploadDir; // Upload directory
protected $allowedMimeTypes = []; // Only allow these file to be uploaded
protected $blockedMimeTypes = []; // Don't allow these files to be uploaded
protected $maxFileSize = 1000000; // In bytes
protected $makeFilenameUnique = false; // Make the filename unique if two files have the same name
protected $overwrite = false; // Allow overwriting of files with the same name
protected $createDirs = false; // Allow the automatic creation of any upload directories

关于示例的说明

如果您想运行这些示例,则需要更改包含路径以指向您的自动加载器或手动包含 FileUploader 类。