file_uploading.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
  6. <title>文件上传类 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
  7. <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  8. <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
  9. <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
  10. <link rel="canonical" href="http://codeigniter.org.cn/user_guide/libraries/file_uploading.html" />
  11. <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
  12. <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
  13. <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
  14. <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
  15. <meta name="robots" content="all" />
  16. <meta name="author" content="ExpressionEngine Dev Team" />
  17. <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
  18. </head>
  19. <body>
  20. <!-- START NAVIGATION -->
  21. <div id="nav">
  22. <div id="nav_inner">
  23. <script type="text/javascript">create_menu('../');</script>
  24. </div>
  25. </div>
  26. <script type="text/javascript">_setNavigation();</script>
  27. <div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" /></a></div>
  28. <div id="masthead" class="clearfix">
  29. <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
  30. <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a>  <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
  31. </div>
  32. <!-- END NAVIGATION -->
  33. <!-- START BREADCRUMB -->
  34. <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
  35. <tr>
  36. <td id="breadcrumb">
  37. <a href="#" target="_blank">CodeIgniter 中国首页</a>&nbsp;&#8250;&nbsp;
  38. <a href="../index.html">用户指南首页</a>&nbsp;&#8250;&nbsp;文件上传类 </td>
  39. <td id="searchbox">
  40. <form method="get" action="http://www.google.com.hk/search" target="google_window">
  41. <input type="hidden" name="client" value="pub-0176846097796333"></input>
  42. <input type="hidden" name="forid" value="1"></input>
  43. <input type="hidden" name="ie" value="UTF-8"></input>
  44. <input type="hidden" name="oe" value="UTF-8"></input>
  45. <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
  46. 搜索用户指南&nbsp;
  47. <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
  48. &nbsp;
  49. <input type="submit" class="submit" name="sa" value="Go" />
  50. </form>
  51. </td>
  52. </tr>
  53. </table>
  54. <!-- END BREADCRUMB -->
  55. <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
  56. <a href="#" target="_blank">查看原文</a>
  57. </div>
  58. <!--<br clear="all" />--><!-- START CONTENT -->
  59. <div id="content">
  60. <h1>文件上传类</h1>
  61. <p>CodeIgniter 的文件上传类允许文件被上传。您可以设置指定上传某类型的文件及指定大小的文件。</p>
  62. <h2>处理过程</h2>
  63. <p>上传文件普遍的过程:</p>
  64. <ul>
  65. <li>一个上传文件用的表单,允许用户选择一个文件并上传它。</li>
  66. <li>当这个表单被提交,该文件被上传到指定的目录。</li>
  67. <li>同时,该文件将被验证是否符合您设定的要求。</li>
  68. <li>一旦文件上传成功,还要返回一个上传成功的确认窗口。</li>
  69. </ul>
  70. <p>这里有一个简短的教程来显示这个过程。此后你将会找到相关的参考信息。</p>
  71. <h2>创建上传表单</h2>
  72. <p>运用文本编辑器创建一个名为<dfn>upload_form.php</dfn>的文件,复制以下代码并保存在<samp>applications/views/</samp>目录里:</p>
  73. <textarea class="textarea" style="width:100%" cols="50" rows="23">
  74. &lt;html>
  75. &lt;head>
  76. &lt;title>Upload Form&lt;/title>
  77. &lt;/head>
  78. &lt;body>
  79. &lt;?php echo $error;?&gt;
  80. &lt;?php echo form_open_multipart('upload/do_upload');?&gt;
  81. &lt;input type="file" name="userfile" size="20" />
  82. &lt;br />&lt;br />
  83. &lt;input type="submit" value="upload" />
  84. &lt;/form>
  85. &lt;/body>
  86. &lt;/html></textarea>
  87. <p>你会看到这里运用到了一个表单辅助函数来创建表单的开始标签,文件上传需要一个 multipart form,因为这个表单辅助函数为你创建了一个合适的语句。你还会看到我们运用了一个$error变量,当用户提交该表单出现错误时会显示相关的出错信息。</p>
  88. <h2>上传成功的页面</h2>
  89. <p>运用文本编辑器创建一个名为<dfn>upload_success.php</dfn>的文件。复制以下代码保存到<samp>applications/views/</samp>目录里:</p>
  90. <textarea class="textarea" style="width:100%" cols="50" rows="20">&lt;html>
  91. &lt;head>
  92. &lt;title>Upload Form&lt;/title>
  93. &lt;/head>
  94. &lt;body>
  95. &lt;h3>Your file was successfully uploaded!&lt;/h3>
  96. &lt;ul>
  97. &lt;?php foreach ($upload_data as $item => $value):?&gt;
  98. &lt;li>&lt;?php echo $item;?&gt;: &lt;?php echo $value;?&gt;&lt;/li>
  99. &lt;?php endforeach; ?&gt;
  100. &lt;/ul>
  101. &lt;p>&lt;?php echo anchor('upload', 'Upload Another File!'); ?&gt;&lt;/p>
  102. &lt;/body>
  103. &lt;/html></textarea>
  104. <h2>控制器</h2>
  105. <p>运用文本编辑器,创建一个名为<dfn>upload.php</dfn>的控制器.复制以下代码并保存到<samp>applications/controllers/</samp>目录里:</p>
  106. <textarea class="textarea" style="width:100%" cols="50" rows="43">&lt;?php
  107. class Upload extends CI_Controller &#123;
  108. function __construct()
  109. &#123;
  110. parent::__construct();
  111. $this-&gt;load-&gt;helper(array('form', 'url'));
  112. &#125;
  113. function index()
  114. &#123;
  115. $this-&gt;load-&gt;view('upload_form', array('error' => ' ' ));
  116. &#125;
  117. function do_upload()
  118. &#123;
  119. $config['upload_path'] = './uploads/';
  120. $config['allowed_types'] = 'gif|jpg|png';
  121. $config['max_size'] = '100';
  122. $config['max_width'] = '1024';
  123. $config['max_height'] = '768';
  124. $this-&gt;load-&gt;library('upload', $config);
  125. if ( ! $this-&gt;upload-&gt;do_upload())
  126. &#123;
  127. $error = array('error' => $this-&gt;upload-&gt;display_errors());
  128. $this-&gt;load-&gt;view('upload_form', $error);
  129. &#125;
  130. else
  131. &#123;
  132. $data = array('upload_data' => $this-&gt;upload-&gt;data());
  133. $this-&gt;load-&gt;view('upload_success', $data);
  134. &#125;
  135. &#125;
  136. &#125;
  137. ?&gt;</textarea>
  138. <h2>上传文件目录</h2>
  139. <p>你还需要一个目标文件夹来存储上传的图片。在根目录上创建一个名为<dfn>uploads</dfn>的文件并设置该文件的属性为 777。(即可读写)</p>
  140. <h2>提交表单</h2>
  141. <p>要提交你的表单,输入类似如下的URL:</p>
  142. <code>example.com/index.php/<var>upload</var>/</code>
  143. <p>你将看到一个上传表单,任选一张&#40;jpg, gif,或者png&#41;图片进行提交. 如果你在控制器里设置的路径是正确的,它将开始工作。</p>
  144. <p>&nbsp;</p>
  145. <h1>参考指南</h1>
  146. <h2>初始化文件上传类</h2>
  147. <p>与CodeIgniter的其它一些类相似,文件上传类用<dfn>$this-&gt;load-&gt;library</dfn>函数在控制器里进行初始化:</p>
  148. <code>$this-&gt;load-&gt;library('upload');</code>
  149. <p>一旦文件上传类被加载,对象将通过如下方法来引用:<dfn>$this-&gt;upload</dfn></p>
  150. <h2>偏好设置</h2>
  151. <p>与其它库类似,你将根据你的偏好设置来控制要被上传的文件,在控制器里,你建立了如下的偏好设置:</p>
  152. <code>$config['upload_path'] = './uploads/';<br />
  153. $config['allowed_types'] = 'gif|jpg|png';<br />
  154. $config['max_size'] = '100';<br />
  155. $config['max_width'] = '1024';<br />
  156. $config['max_height'] = '768';<br />
  157. <br />
  158. $this-&gt;load-&gt;library('upload', $config);<br /><br />
  159. // Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:<br />
  160. //【如果你在 config文件夹内的 autoload.php 文件中自动加载了 upload 类,或者在构造函数内加载了的话,可以调用初始化函数 initialize 来加载设置。————本括号内由IT不倒翁翻译,加入了自己的理解】<br />
  161. $this-&gt;upload-&gt;initialize($config);</code>
  162. <p>以上偏好设置将被完全执行。以下是所有偏好设置参数的描述。</p>
  163. <h2>偏好设置参数</h2>
  164. <p>以下偏好设置参数是可用的。当你没有特别指定偏好设置参数时,默认值如下:</p>
  165. <table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
  166. <tr>
  167. <th>偏好设置</th>
  168. <th>默认值</th>
  169. <th>选项</th>
  170. <th>描述</th>
  171. </tr>
  172. <tr>
  173. <td class="td"><strong>upload_path</strong></td>
  174. <td class="td">None</td>
  175. <td class="td">None</td>
  176. <td class="td">文件上传路径。该路径必须是可写的,相对路径和绝对路径均可以。</td>
  177. </tr>
  178. <tr>
  179. <td class="td"><strong>allowed_types</strong></td>
  180. <td class="td">None</td>
  181. <td class="td">None</td>
  182. <td class="td">允许上传文件的MIME类型;通常文件扩展名可以做为MIME类型. 允许多个类型用竖线‘|’分开</td>
  183. </tr>
  184. <tr>
  185. <td class="td"><strong>file_name</strong></td>
  186. <td class="td">None</td>
  187. <td class="td">想要使用的文件名</td>
  188. <td class="td">
  189. <p>如果设置了这个参数,CodeIgniter 将根据这里设置的文件名来对上传的文件进行重命名。文件名中的扩展名也必须是允许的文件类型。</p>
  190. </td>
  191. </tr>
  192. <tr>
  193. <td class="td"><strong>overwrite</strong></td>
  194. <td class="td">FALSE</td>
  195. <td class="td">TRUE/FALSE (boolean)</td>
  196. <td class="td">是否覆盖。该参数为TRUE时,如果上传文件时碰到重名文件,将会把原文件覆盖;如果该参数为FALSE,上传文件重名时,CI将会在新文件的文件名后面加一个数字。</td>
  197. </tr>
  198. <tr>
  199. <td class="td"><strong>max_size</strong></td>
  200. <td class="td">0</td>
  201. <td class="td">None</td>
  202. <td class="td">允许上传文件大小的最大值(以K为单位)。该参数为0则不限制。注意:通常PHP也有这项限制,可以在php.ini文件中指定。通常默认为2MB。</td>
  203. </tr>
  204. <tr>
  205. <td class="td"><strong>max_width</strong></td>
  206. <td class="td">0</td>
  207. <td class="td">None</td>
  208. <td class="td">上传文件的宽度最大值(像素为单位)。0为不限制。</td>
  209. </tr>
  210. <tr>
  211. <td class="td"><strong>max_height</strong></td>
  212. <td class="td">0</td>
  213. <td class="td">None</td>
  214. <td class="td">上传文件的高度最大值(像素为单位)。0为不限制。</td>
  215. </tr>
  216. <tr>
  217. <td class="td"><strong>max_filename</strong></td>
  218. <td class="td">0</td>
  219. <td class="td">None</td>
  220. <td class="td">文件名的最大长度。0为不限制。</td>
  221. </tr>
  222. <tr>
  223. <td class="td"><strong>encrypt_name</strong></td>
  224. <td class="td">FALSE</td>
  225. <td class="td">TRUE/FALSE (boolean)</td>
  226. <td class="td">是否重命名文件。如果该参数为TRUE,上传的文件将被重命名为随机的加密字符串。当你想让文件上传者也不能区分自己上传的文件的文件名时,是非常有用的。当 overwrite 为 FALSE 时,此选项才起作用。</td>
  227. </tr>
  228. <tr>
  229. <td class="td"><strong>remove_spaces</strong></td>
  230. <td class="td">TRUE</td>
  231. <td class="td">TRUE/FALSE (boolean)</td>
  232. <td class="td">参数为TRUE时,文件名中的空格将被替换为下划线。推荐使用。</td>
  233. </tr>
  234. </table>
  235. <h2>在配置文件里设置偏好设置参数</h2>
  236. <p>如果你不愿意应用如上方法进行偏好设置,你可以用一个配置文件来取代它。简单创建一个名为<var>upload.php</var>的文件,添加 <var>$config</var>数组到该文件里,然后保存文件到:<var>config/upload.php</var>,它将被自动加载。当你把配置参数保存到该文件里,你不需要用<dfn>$this-&gt;upload-&gt;initialize</dfn>函数进行手动加载。</p>
  237. <h2>运用到的函数</h2>
  238. <p>以下函数被运用</p>
  239. <h2>$this-&gt;upload-&gt;do_upload()</h2>
  240. <p>根据你的偏好配置参数执行操作。注意:默认情况下上传的文件来自于提交表单里名为<dfn>userfile</dfn>的文件域,并且该表单必须是 "multipart"类型:</p>
  241. <code>&lt;form method="post" action="some_action" enctype="multipart/form-data" /></code>
  242. <p>如果你想在执行<dfn>do_upload</dfn>函数之前自定义自己的文件域名称,可通过以下方法实现:</p>
  243. <code>
  244. $field_name = "some_field_name";<br />
  245. $this-&gt;upload-&gt;do_upload($field_name)</code>
  246. <h2>$this-&gt;upload-&gt;display_errors()</h2>
  247. <p>如果<dfn>do_upload()</dfn>返回失败,显示错误信息。此函数不会自动输出,而是返回数据,所以你可以按你的要求安排。</p>
  248. <h3>格式化错误</h3>
  249. <p>上面的函数默认使用&lt;p>标记错误信息。你可以像这样设置自己的分隔符。</p>
  250. <code>$this-&gt;upload-&gt;display_errors('<var>&lt;p></var>', '<var>&lt;/p></var>');</code>
  251. <h2>$this-&gt;upload-&gt;data()</h2>
  252. <p>这是一个辅助函数,它返回你上传文件的所有相关信息的数组。</p>
  253. <code>Array<br />
  254. (<br />
  255. &nbsp;&nbsp;&nbsp;&nbsp;[file_name]&nbsp;&nbsp;&nbsp;&nbsp;=> mypic.jpg<br />
  256. &nbsp;&nbsp;&nbsp;&nbsp;[file_type]&nbsp;&nbsp;&nbsp;&nbsp;=> image/jpeg<br />
  257. &nbsp;&nbsp;&nbsp;&nbsp;[file_path]&nbsp;&nbsp;&nbsp;&nbsp;=> /path/to/your/upload/<br />
  258. &nbsp;&nbsp;&nbsp;&nbsp;[full_path]&nbsp;&nbsp;&nbsp;&nbsp;=> /path/to/your/upload/jpg.jpg<br />
  259. &nbsp;&nbsp;&nbsp;&nbsp;[raw_name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> mypic<br />
  260. &nbsp;&nbsp;&nbsp;&nbsp;[orig_name]&nbsp;&nbsp;&nbsp;&nbsp;=> mypic.jpg<br />
  261. &nbsp;&nbsp;&nbsp;&nbsp;[client_name]&nbsp;&nbsp;&nbsp;&nbsp;=> mypic.jpg<br />
  262. &nbsp;&nbsp;&nbsp;&nbsp;[file_ext]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> .jpg<br />
  263. &nbsp;&nbsp;&nbsp;&nbsp;[file_size]&nbsp;&nbsp;&nbsp;&nbsp;=> 22.2<br />
  264. &nbsp;&nbsp;&nbsp;&nbsp;[is_image]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 1<br />
  265. &nbsp;&nbsp;&nbsp;&nbsp;[image_width]&nbsp;&nbsp;=> 800<br />
  266. &nbsp;&nbsp;&nbsp;&nbsp;[image_height] => 600<br />
  267. &nbsp;&nbsp;&nbsp;&nbsp;[image_type]&nbsp;&nbsp;&nbsp;=> jpeg<br />
  268. &nbsp;&nbsp;&nbsp;&nbsp;[image_size_str] => width="800" height="200"<br />
  269. )</code>
  270. <h3>解释</h3>
  271. <p>这里是对上面数组项的解释。</p>
  272. <table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
  273. <tr><th>Item</th><th>Description</th></tr>
  274. <tr><td class="td"><strong>file_name</strong></td>
  275. <td class="td">已上传的文件名(包括扩展名)</td></tr>
  276. <tr><td class="td"><strong>file_type</strong></td>
  277. <td class="td">文件的Mime类型</td></tr>
  278. <tr><td class="td"><strong>file_path</strong></td>
  279. <td class="td">不包括文件名的文件绝对路径</td></tr>
  280. <tr><td class="td"><strong>full_path</strong></td>
  281. <td class="td">包括文件名在内的文件绝对路径</td></tr>
  282. <tr><td class="td"><strong>raw_name</strong></td>
  283. <td class="td">不包括扩展名在内的文件名部分</td></tr>
  284. <tr><td class="td"><strong>orig_name</strong></td>
  285. <td class="td">上传的文件最初的文件名。这只有在设置上传文件重命名(encrypt_name)时才有效。</td></tr>
  286. <tr><td class="td"><strong>client_name</strong></td>
  287. <td class="td">上传的文件在客户端的文件名。</td></tr>
  288. <tr><td class="td"><strong>file_ext</strong></td>
  289. <td class="td">文件扩展名(包括‘.’)</td></tr>
  290. <tr><td class="td"><strong>file_size</strong></td>
  291. <td class="td">图像大小,单位是kb</td></tr>
  292. <tr><td class="td"><strong>is_image</strong></td>
  293. <td class="td">是否是图像。 1 =是图像。 0 = 不是图像。</td></tr>
  294. <tr><td class="td"><strong>image_width</strong></td>
  295. <td class="td">图像宽度.</td></tr>
  296. <tr><td class="td"><strong>image_height</strong></td>
  297. <td class="td">图像高度</td></tr>
  298. <tr><td class="td"><strong>image_type</strong></td>
  299. <td class="td">文件类型,即文件扩展名(不包括‘.’)</td></tr>
  300. <tr><td class="td"><strong>image_size_str</strong></td>
  301. <td class="td">一个包含width和height的字符串。用于放在一个img标签里。</td></tr>
  302. </table><p>&nbsp;</p>
  303. <div id="Contributors">
  304. 翻译贡献者:
  305. cnmiss, csfhc, helingjun2008, Hex, IT不倒翁, lishen2, roln, szlinz, thankwsx, wangyueqiang, yinzhili</div>
  306. <div id="DocDate">
  307. 最后修改: 2013-11-06 08:08:53</div>
  308. </div>
  309. <!-- END CONTENT -->
  310. <div id="footer">
  311. <p>
  312. 上一个主题:&nbsp;&nbsp;<a href="encryption.html">加密类</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;<a href="#top">页首</a>
  313. &nbsp;&middot;&nbsp;&nbsp;<a href="../index.html">用户指南首页</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;<a href="form_validation.html">表单验证类</a> </p>
  314. <p><a href="#">CodeIgniter</a> &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2013 &nbsp;&middot;&nbsp; <a href="#">Ellislab, Inc.</a></p>
  315. <p>中文化: <a href="#">CodeIgniter 中国</a> &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.30 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼</p>
  316. </div>
  317. </body>
  318. </html>