上传文件的命名规范用于确保文件不会产生冲突或者覆盖的情况。而命名规范的定义又需要根据你的业务逻辑来调整,不是固定的。例如,如果你采用时间戳的方式来定义命名规范,那么在同时上传多个文件的时候可能产生冲突(因为同一秒内可以上传多个文件),因此你需要根据你的业务需求来设置合适的上传命名规则。这里顺便来说下saveRule参数的具体用法
一、采用函数方式如果传入的字符串是一个函数名,那么表示采用函数动态生成上传文件名(不包括文件后缀),例如:
$upload->saveRule = 'time'; // 采用时间戳命名$upload->saveRule = 'com_create_guid'; // 采用GUID序列命名也可以采用用户自定义函数:$upload->saveRule = 'myfun'; // 采用自定义函数命名
二、直接设置上传文件名
如果传入的参数不是一个函数名,那么就会直接当做是上传文件名,例如:
$upload->saveRule = time().'_'.mt_rand();
复制代码三、保持上传文件名不变
如果你想保持上传的文件名不变,那么只需要设置命名规范为空即可,例如:
$upload->saveRule = '';
复制代码一般来说不建议保持不变,因为会导致相同的文件名上传后被覆盖的情况。子目录保存saveRule只是用于设置文件的保存规则,不涉及到目录,如果希望采用子目录保存上传文件,可以使用下面的三种方式设置子目录:
一、哈希子目录$upload->subType = 'hash';$upload->hashLevel = 2;
复制代码设置后,会自动对上传文件进行哈希编码后的第一个和第二个字母分别作为一级和二级子目录名称保存。如果hashLevel不设置,则默认为一级子目录。
二、日期子目录这种方式也比较常用,用日期作为子目录名称,$upload->subType = 'date';$upload->dateFormat = 'Y-m-d';
复制代码dateFormat参数则用于配合设置日期的格式,如果不设置,则默认为Ymd。
三、自定义子目录这种方式作为一种更灵活的子目录保存方式,是最新添加的功能支持。$upload->subType = 'custom';$upload->subDir = get_user_id();
复制代码自定义子目录方式的优势在于,可以动态设置子目录名称,上面的定义就采用了当前用户ID作为子目录名称。生成缩略图缩略图功能需要Image扩展类的支持,所以确保你已经有了这个扩展类。然后设置如下参数://设置需要生成缩略图,仅对图像文件有效$upload->thumb = true;//设置需要生成缩略图的文件前缀$upload->thumbPrefix = 'm_,s_'; //生产2张缩略图//设置缩略图最大宽度$upload->thumbMaxWidth = '200,50';//设置缩略图最大高度$upload->thumbMaxHeight = '200,50';//设置生成缩略图后移除原图$upload->thumbRemoveOrigin = true;
缩略图的前(后)缀数量必须和宽度数量对应,表示生成多个缩略图。生成的缩略图默认位于保存文件的实际所在目录(包括子目录的情况),当然你也可以指定统一的缩略图保存路径,例如:$upload->thumbPath = './Uploads/thumb/';
复制代码这里的thumbPath参数必须用“/”结尾。我们可以设置缩略图采用统一的文件后缀,例如:
// 设置缩略图的固定后缀$upload->thumbExt = 'jpg';
复制代码更多的上传类用法可以通过上传参数的设置来完成。