重命名无法使用 InputFilter 导入的文件
rename file which couldn't be imported using InputFilter
我不太确定如何正确地提出这个问题。
我一次导入多个文件。文件名包括文件所属的匹配系统。到目前为止效果很好。
但是会有不匹配的文件,因为系统没有找到。我需要标记它们,以便用户可以检查。
我的想法是将这些文件也导入网络服务器,但在不同的目录中。该目录可以在之后显示给用户。
我的 InputFilter
将导入到匹配文件的正确位置。
$inputFilter->add([
'type' => 'Zend\InputFilter\FileInput',
'name' => 'PAD_Document_Path', // Element's name.
'required' => true, // Whether the field is required.
'filters' => [ // Filters.
[
'name' => \Zend\Filter\File\RenameUpload::class,
'options' => [
'use_upload_name'=>true,
'use_upload_extension' => true,
'randomize' => false,
'overwrite' => true,
'target' => './public/files/pads',
],
],
],
'validators' => [ // Validators.
[
'name' => \Zend\Validator\File\Extension::class,
'options' => [
'extension' => 'pdf',
'message' => 'File extension not match',
],
],
[
'name' => \Zend\Validator\File\MimeType::class,
'options' => [
'mimeType' => 'application/pdf', //'text/xls', 'text/xlsx',
'message' => 'File type not match',
],
],
[
'name' => \Zend\Validator\File\Size::class,
'options' => [
'min' => '1kB', // minimum of 1kB
'max' => '8MB',
'message' => 'File too large',
],
],
]
]);
那么我可以使用 InputFilter
来导入不匹配的文件吗?如果那不可能,哪种方式最好?
另一个想法是根本不导入不匹配的文件,但我需要在客户端系统中重命名它们。这可能是不可能的,不是吗?
希望我解释得当,让大家明白。
由于问题下方的评论讨论,我们得出了一个可能的解决方案。
(请试一试,否则在你解决的时候加上你自己的答案)
if we go a step back, before importing. It is then the point of validation, if want to rename at this point, how would you do this?
The docs 向您展示了如何重命名文件的选项,还通过为文件设置目标位置。但是,这是 所有 文件的规则。
您应该创建这样的规则,以统一验证文件。当您需要根据标准将文件发送到特定位置时,例如文件名,那么你应该在表单验证之后创建这个逻辑。例如在控制器 class 中。在该控制器中,您处理符合 "happy flow" 中要求的文件,并将不匹配的文件留在临时文件中。
如果有任何文件不匹配,您将用户重定向到一个位置,他必须在该位置决定文件的目标 and/or 如何处理它们。如果没有任何文件,您可以照常进行,以顺利完成应用程序的流程。
示例流程:
- 文件 A 到 F 已上传。
- A 和 B 很好,它们与系统 X 和 Y 匹配并移动。
在上述 2 之后不匹配的文件(C 到 F)的备用流程
- 无法匹配余数。
- 用户被重定向到他必须选择每个文件的页面,文件是针对 X 还是针对 Y。
- 移动文件作为对所选选项的更正
我不太确定如何正确地提出这个问题。 我一次导入多个文件。文件名包括文件所属的匹配系统。到目前为止效果很好。 但是会有不匹配的文件,因为系统没有找到。我需要标记它们,以便用户可以检查。
我的想法是将这些文件也导入网络服务器,但在不同的目录中。该目录可以在之后显示给用户。
我的 InputFilter
将导入到匹配文件的正确位置。
$inputFilter->add([
'type' => 'Zend\InputFilter\FileInput',
'name' => 'PAD_Document_Path', // Element's name.
'required' => true, // Whether the field is required.
'filters' => [ // Filters.
[
'name' => \Zend\Filter\File\RenameUpload::class,
'options' => [
'use_upload_name'=>true,
'use_upload_extension' => true,
'randomize' => false,
'overwrite' => true,
'target' => './public/files/pads',
],
],
],
'validators' => [ // Validators.
[
'name' => \Zend\Validator\File\Extension::class,
'options' => [
'extension' => 'pdf',
'message' => 'File extension not match',
],
],
[
'name' => \Zend\Validator\File\MimeType::class,
'options' => [
'mimeType' => 'application/pdf', //'text/xls', 'text/xlsx',
'message' => 'File type not match',
],
],
[
'name' => \Zend\Validator\File\Size::class,
'options' => [
'min' => '1kB', // minimum of 1kB
'max' => '8MB',
'message' => 'File too large',
],
],
]
]);
那么我可以使用 InputFilter
来导入不匹配的文件吗?如果那不可能,哪种方式最好?
另一个想法是根本不导入不匹配的文件,但我需要在客户端系统中重命名它们。这可能是不可能的,不是吗?
希望我解释得当,让大家明白。
由于问题下方的评论讨论,我们得出了一个可能的解决方案。
(请试一试,否则在你解决的时候加上你自己的答案)
if we go a step back, before importing. It is then the point of validation, if want to rename at this point, how would you do this?
The docs 向您展示了如何重命名文件的选项,还通过为文件设置目标位置。但是,这是 所有 文件的规则。
您应该创建这样的规则,以统一验证文件。当您需要根据标准将文件发送到特定位置时,例如文件名,那么你应该在表单验证之后创建这个逻辑。例如在控制器 class 中。在该控制器中,您处理符合 "happy flow" 中要求的文件,并将不匹配的文件留在临时文件中。
如果有任何文件不匹配,您将用户重定向到一个位置,他必须在该位置决定文件的目标 and/or 如何处理它们。如果没有任何文件,您可以照常进行,以顺利完成应用程序的流程。
示例流程:
- 文件 A 到 F 已上传。
- A 和 B 很好,它们与系统 X 和 Y 匹配并移动。
在上述 2 之后不匹配的文件(C 到 F)的备用流程
- 无法匹配余数。
- 用户被重定向到他必须选择每个文件的页面,文件是针对 X 还是针对 Y。
- 移动文件作为对所选选项的更正