重命名无法使用InputFilter导入的文件

时间:2018-10-11 11:29:01

标签: zend-framework zend-form zend-framework3 zend-inputfilter

我不太确定如何正确地问这个问题。 我一口气导入了几个文件。文件名包括文件所属的匹配系统。到目前为止,效果还不错。 但是将存在不匹配的文件,因为找不到系统。我需要标记它们,以便用户检查。

我的想法是将此文件也导入到Web服务器,但在另一个目录中。目录可以随后显示给用户。

我的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导入不匹配的文件吗?如果不可能的话,哪种方法是最好的?

另一个想法是根本不导入不匹配的文件,但是随后我需要在客户端系统上重命名它们。那可能是不可能的,不是吗?

我希望我能正确解释它,以便每个人都能理解。

1 个答案:

答案 0 :(得分:1)

由于以下问题的评论讨论,我们提出了一个可能的解决方案。

(请试一下,否则解决时请添加您自己的答案)


  

如果在导入之前回退一步。然后是验证的重点,如果要在此时进行重命名,您将如何做?

The docs还会通过设置文件的目标位置,向您显示如何重命名文件的选项。但是,这是所有文件的规则。

您应创建诸如此类的规则,以统一验证文件。当您需要根据标准将文件发送到特定位置时,例如文件名,那么您应该在表单验证后创建此逻辑。例如在Controller类中。在该Controller中,您可以处理符合您“快乐流程”中要求的文件,并将那些不匹配的文件保留在临时文件中。

如果任何文件都不匹配,则将用户重定向到一个位置,在该位置,他必须决定文件的目标位置和/或如何处理文件。如果没有任何文件,则可以正常处理应用程序。

示例流程:

  1. 文件A至F已上传。
  2. A和B很好,它们与系统X和Y匹配并为它们移动。

上述2后不匹配的文件(C至F)的备用流

  1. 余数无法匹配。
  2. 如果文件是X或Y,则用户将重定向到每个文件必须选择的页面。
  3. 将文件移动为对选定选项的更正