Zend_File_Transfer-Introduction.xml 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <sect1 id="zend.file.transfer.introduction">
  2. <title>Zend_File_Transfer</title>
  3. <para>
  4. <code>Zend_File_Transfer</code> 让开发者控制文件上载和下载。它有用于文件的内置的校验器
  5. 并且甚至可以用过滤器来修改文件。<code>Zend_File_Transfer</code> 使用适配器,这样对于
  6. 不同的传输协议如 HTTP、 FTP、 WEBDAV 等等就可以使用相同的 API。
  7. </para>
  8. <note>
  9. <title>局限</title>
  10. <para>
  11. 当前的 <code>Zend_File_Transfer</code> 实现包含在 1.6.0 版中,仅限于 HTTP Post 上载。文件下载和
  12. 其它适配器在下次发行时会增加。没实现的功能会抛出异常。所以应该直接使用 <code>Zend_File_Transfer_Adapter_Http</code> 的实例。
  13. 当多重适配器可用时,这个就会改变。
  14. </para>
  15. </note>
  16. <para>
  17. <code>Zend_File_Transfer</code> 的用法非常简单。它包括两个部分:用于上载的 HTTP 表单和用
  18. <code>Zend_File_Transfer</code> 来处理上载文件。参见下面的例子:
  19. </para>
  20. <example id="zend.file.transfer.introduction.example">
  21. <title> 简单的文件上载表单 </title>
  22. <para>
  23. 本例示范了一个基本的文件上传,它使用 <code>Zend_File_Transfer</code> 来完成。
  24. 第一部分是文件表单。在例子中,有一个文件要上载。
  25. </para>
  26. <programlisting><![CDATA[
  27. <form enctype="multipart/form-data" action="/file/upload" method="POST">
  28. <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  29. Choose a file to upload: <input name="uploadedfile" type="file" />
  30. <br />
  31. <input type="submit" value="Upload File" />
  32. </form>
  33. ]]>
  34. </programlisting>
  35. <para>
  36. 注意利用 <link linkend="zend.form.standardElements.file">Zend_Form_Element_File</link> 而不需要手工编写 HTML。
  37. </para>
  38. <para>
  39. 下一步是生成上载的接收者。在本例中接收者是 <code>/file/upload</code> 。所以我们就编写
  40. 带有动作 <code>upload</code> 的控制器 <code>file</code> 。
  41. </para>
  42. <programlisting role="php"><![CDATA[
  43. $adapter = new Zend_File_Transfer_Adapter_Http();
  44. $adapter->setDestination('C:\temp');
  45. if (!$adapter->receive()) {
  46. $messages = $adapter->getMessages();
  47. echo implode("\n", $messages);
  48. }
  49. ]]>
  50. </programlisting>
  51. <para>
  52. 正如你所看到的简单的用法,使用 <code>setDestination</code> 定义一个目的地然后调用 <code>receive()</code> 方法。
  53. 如果有任何上载错误,就会包含在返回的异常里。
  54. </para>
  55. <note>
  56. <title>注意</title>
  57. <para>
  58. 记住这只是个最简单的用法,应该 <emphasis role="strong">永远不要</emphasis>仅仅把它用于实际的环境,
  59. 因为它有严重的安全问题。实际中需要用校验器来增强安全性。
  60. </para>
  61. </note>
  62. </example>
  63. </sect1>
  64. <!--
  65. vim:se ts=4 sw=4 tw=80 et:
  66. -->