本文實例講述了Thinkphp5+uploadify實現的文件上傳功能。分享給大家供大家參考,具體如下:
初次接觸服務器端開發,邊學習邊試著做一個OTA后臺服務器,費了好大勁才實現了文件上傳和進度條顯示。
遇到幾個問題:
1. 大文件上傳失敗
2.上傳取消X 符合顯示不出來
3. 不知道如何傳遞變量值給后臺php
記錄下過程:
1. 下載uploadify 代碼到工程里,如public\plug-ins\uploadify 下。
2. 前端腳本如下,
客戶端在formData 中傳遞版本號,請看version_id 賦值方法,需要先在控制器里給它assign。
取消符合顯示不了,需要修改uploadify.css 里面的background: url('uploadify-cancel.png')
注意uploadify 中uploader的寫法
01 | <form enctype= "multipart/form-data" method= "post" > |
02 | <input type= "file" name= "uploadify" id= "uploadify" multiple= "true" /> |
04 | <script type= "text/javascript" > |
05 | <?php $timestamp = time();?> |
06 | var maxSize = 1024 * 1024*1024; |
08 | $( '#uploadify' ).uploadify({ |
10 | <span style= "white-space:pre" > </span> 'fileSizeLimit ' : maxSize, |
12 | 'timestamp' : '<?php echo $timestamp;?>' , |
13 | 'token' : '<?php echo md5(' unique_salt ' . $timestamp);?>' , |
14 | <span style= "white-space:pre" > </span> 'version_id' : "{$version_id}" |
16 | 'swf' : '/public/plug-ins/uploadify/uploadify.swf' , |
17 | <span style= "white-space:pre" > </span> 'cancelImg' : '/public/plug-ins/uploadify/uploadify-cancel.png' , |
18 | 'uploader' : '{:url("Package/upload")}' , |
19 | <span style= "white-space:pre" > </span> 'fileTypeDesc' : 'zip文件' , |
20 | <span style= "white-space:pre" > </span> 'fileTypeExts' : '*.zip' , |
21 | <span style= "white-space:pre" > </span> 'multi' : false |
3. 后端腳本對應控制器 Package 的upload函數
注意上傳文件的獲取方法,不能使用Thinkphp5 官方文檔那種獲取方式。
保存文件名不能帶特殊符號
修改php.ini: upload_max_filesize = 1024M
post_max_size=48
重啟服務
01 | public function upload(){ |
02 | $verifyToken = md5( 'unique_salt' . $_POST [ 'timestamp' ]); |
03 | if (! empty ( $_FILES ) && $_POST [ 'token' ] == $verifyToken ) { |
04 | $tempFile = $_FILES [ 'Filedata' ][ 'tmp_name' ]; |
18 | $version = model( "Version" )->retrieve_by_version( $_POST [ 'version_id' ]); |
20 | $file = new File( $tempFile , 'rw' ); |
21 | $hash_code = $file ->hash(); |
22 | $time = date ( "Y-m-d-i-s" , $_POST [ 'timestamp' ]); |
23 | $info = $file ->move(ROOT_PATH . 'public' . DS . 'uploads' .DS. $version [ 'project_name' ].DS. $version [ 'version_name' ], 'update_' . $time . '.zip' ); |
26 | echo $info ->getExtension(); |
27 | echo $info ->getSaveName(); |
28 | echo $info ->getFilename(); |
31 | echo $file ->getError(); |
希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。