第 19 章 Zend_File

目录

19.1. Zend_File_Transfer
19.2. Validators for Zend_File_Transfer
19.2.1. Using Validators with Zend_File_Transfer
19.2.2. Count Validator
19.2.3. Crc32 Validator
19.2.4. ExcludeExtension Validator
19.2.5. ExcludeMimeType Validator
19.2.6. Exists Validator
19.2.7. Extension Validator
19.2.8. FilesSize Validator
19.2.9. ImageSize Validator
19.2.10. IsCompressed Validator
19.2.11. IsImage Validator
19.2.12. Hash Validator
19.2.13. Md5 Validator
19.2.14. MimeType Validator
19.2.15. NotExists Validator
19.2.16. Sha1 Validator
19.2.17. Size Validator
19.2.18. WordCount Validator
19.3. Filters for Zend_File_Transfer
19.3.1. Using filters with Zend_File_Transfer
19.3.2. Decrypt filter
19.3.3. Encrypt filter
19.3.4. LowerCase filter
19.3.5. Rename filter
19.3.6. UpperCase filter
19.4. Migrating from previous versions
19.4.1. Migrating from 1.6 to 1.7 or newer
19.4.1.1. Changes when using filters and validators
19.4.1.1.1. Filter: Rename
19.4.1.1.2. Validator: Count
19.4.1.1.3. Validator: Extension
19.4.1.1.4. Validator: FilesSize
19.4.1.1.5. Validator: Hash
19.4.1.1.6. Validator: ImageSize
19.4.1.1.7. Validator: Size
19.4.2. Migrating from 1.6.1 to 1.6.2 or newer
19.4.2.1. Changes when using validators

19.1. Zend_File_Transfer

Zend_File_Transfer 让开发者控制文件上载和下载。它有用于文件的内置的校验器 并且甚至可以用过滤器来修改文件。Zend_File_Transfer 使用适配器,这样对于 不同的传输协议如 HTTP、 FTP、 WEBDAV 等等就可以使用相同的 API。

[注意] 局限

当前的 Zend_File_Transfer 实现包含在 1.6.0 版中,仅限于 HTTP Post 上载。文件下载和 其它适配器在下次发行时会增加。没实现的功能会抛出异常。所以应该直接使用 Zend_File_Transfer_Adapter_Http 的实例。 当多重适配器可用时,这个就会改变。

Zend_File_Transfer 的用法非常简单。它包括两个部分:用于上载的 HTTP 表单和用 Zend_File_Transfer 来处理上载文件。参见下面的例子:

例 19.1.  简单的文件上载表单

本例示范了一个基本的文件上传,它使用 Zend_File_Transfer 来完成。 第一部分是文件表单。在例子中,有一个文件要上载。

<form enctype="multipart/form-data" action="/file/upload" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
        Choose a file to upload: <input name="uploadedfile" type="file" />
    <br />
    <input type="submit" value="Upload File" />
</form>

注意利用 Zend_Form_Element_File 而不需要手工编写 HTML。

下一步是生成上载的接收者。在本例中接收者是 /file/upload 。所以我们就编写 带有动作 upload 的控制器 file

$adapter = new Zend_File_Transfer_Adapter_Http();

$adapter->setDestination('C:\temp');

if (!$adapter->receive()) {
    $messages = $adapter->getMessages();
    echo implode("\n", $messages);
}

        

正如你所看到的简单的用法,使用 setDestination 定义一个目的地然后调用 receive() 方法。 如果有任何上载错误,就会包含在返回的异常里。

[注意] 注意

记住这只是个最简单的用法,应该 永远不要仅仅把它用于实际的环境, 因为它有严重的安全问题。实际中需要用校验器来增强安全性。