先上一張圖檔給大家看看效果,有需要就下載下傳學習。不一定非要在ThinkPHP裡,隻是我非常喜歡去用ThinkPHP做開發了。
好了。現在咱們需要的東西是,下載下傳一個swfupload.js網上很多,自己百度吧.之前有人加我QQ說我寫的博文大部分都是代碼,看不懂,我以後寫博文也先說明思路,然後開始貼代碼分享
整個多圖上傳的流程
1.寫好html代碼,包括上傳以後顯示的效果的html,以及加載swfupload元件.和flash
2.在添加圖檔以後上傳到php裡處理上傳并且傳回上傳圖檔的位址,加載到預覽區域裡.
3.點選X以後,ajax調用php的方法去删除預覽區域的圖檔.
4.在添加圖檔和删除預覽區域的圖檔的同時,都會更改一個隐藏域的值,這樣在完成整個上傳送出表單以後可以把圖檔的位址儲存到資料庫.(看需要)
好了。先寫html代碼吧。(css檔案我就不貼了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></code>
<code><</code><code>html</code> <code>xmlns</code><code>=</code><code>"http://www.w3.org/1999/xhtml"</code><code>></code>
<code><</code><code>head</code><code>></code>
<code><</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Content-Type"</code> <code>content</code><code>=</code><code>"text/html; charset=utf-8"</code> <code>/></code>
<code><</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Cache-control"</code> <code>content</code><code>=</code><code>"private, must-revalidate"</code> <code>/></code>
<code><</code><code>title</code><code>>flash無重新整理多圖檔上傳</</code><code>title</code><code>></code>
<code><</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>></code>
<code>var path='__STYLE__';</code>
<code>var url='__URL__';</code>
<code></</code><code>script</code><code>></code>
<code><</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code> <code>src</code><code>=</code><code>"__STYLE__/js/jquery.js"</code><code>></</code><code>script</code><code>></code>
<code><</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code> <code>src</code><code>=</code><code>"__STYLE__/js/swfupload.js"</code><code>></</code><code>script</code><code>></code>
<code><</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code> <code>src</code><code>=</code><code>"__STYLE__/js/handlers.js"</code><code>></</code><code>script</code><code>></code>
<code><</code><code>link</code> <code>href</code><code>=</code><code>"__STYLE__/css/default.css"</code> <code>rel</code><code>=</code><code>"stylesheet"</code> <code>type</code><code>=</code><code>"text/css"</code> <code>/></code>
<code>var swfu;</code>
<code>window.onload = function () {</code>
<code>swfu = new SWFUpload({</code>
<code>upload_url: "__URL__/uploadImg",</code>
<code>post_params: {"PHPSESSID": "<?</code><code>php</code> <code>echo session_id();?>"},</code>
<code>file_size_limit : "2 MB",</code>
<code>file_types : "*.jpg;*.png;*.gif;*.bmp",</code>
<code>file_types_description : "JPG Images",</code>
<code>file_upload_limit : "100",</code>
<code>file_queue_error_handler : fileQueueError,</code>
<code>file_dialog_complete_handler : fileDialogComplete,</code>
<code>upload_progress_handler : uploadProgress,</code>
<code>upload_error_handler : uploadError,</code>
<code>upload_success_handler : uploadSuccess,</code>
<code>upload_complete_handler : uploadComplete,</code>
<code>button_image_url : "__STYLE__/images/upload.png",</code>
<code>button_placeholder_id : "spanButtonPlaceholder",</code>
<code>button_width: 113,</code>
<code>button_height: 33,</code>
<code>button_text : '',</code>
<code>button_text_style : '.spanButtonPlaceholder { font-family: Helvetica, Arial, sans-serif; font-size: 14pt;} ',</code>
<code>button_text_top_padding: 0,</code>
<code>button_text_left_padding: 0,</code>
<code>button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,</code>
<code>button_cursor: SWFUpload.CURSOR.HAND,</code>
<code>flash_url : "__STYLE__/swf/swfupload.swf",</code>
<code>custom_settings : {</code>
<code>upload_target : "divFileProgressContainer"</code>
<code>},</code>
<code>debug: false</code>
<code>});</code>
<code>};</code>
<code></</code><code>head</code><code>></code>
<code><</code><code>body</code><code>></code>
<code><</code><code>form</code> <code>action</code><code>=</code><code>"__URL__/s"</code> <code>method</code><code>=</code><code>"post"</code><code>></code>
<code><</code><code>div</code> <code>style</code><code>=</code><code>"width: 610px; height: auto; border: 1px solid #e1e1e1; font-size: 12px; padding: 10px;"</code><code>></code>
<code><</code><code>span</code> <code>id</code><code>=</code><code>"spanButtonPlaceholder"</code><code>></</code><code>span</code><code>></code>
<code><</code><code>div</code> <code>id</code><code>=</code><code>"divFileProgressContainer"</code><code>></</code><code>div</code><code>></code>
<code><</code><code>div</code> <code>id</code><code>=</code><code>"thumbnails"</code><code>></code>
<code><</code><code>ul</code> <code>id</code><code>=</code><code>"pic_list"</code> <code>style</code><code>=</code><code>"margin: 5px;"</code><code>></</code><code>ul</code><code>></code>
<code><</code><code>div</code> <code>style</code><code>=</code><code>"clear: both;"</code><code>></</code><code>div</code><code>></code>
<code></</code><code>div</code><code>></code>
<code><</code><code>input</code> <code>type</code><code>=</code><code>"hidden"</code> <code>name</code><code>=</code><code>"s"</code> <code>id</code><code>=</code><code>""</code> <code>value</code><code>=</code><code>""</code><code>/></code>
<code><</code><code>input</code> <code>type</code><code>=</code><code>"submit"</code> <code>value</code><code>=</code><code>"送出"</code> <code>/></code>
<code></</code><code>form</code><code>></code>
<code></</code><code>body</code><code>></code>
<code></</code><code>html</code><code>></code>
詳細說一下swfupload的配置項
upload_url 是上傳圖檔處理的php位址
file_size_limit 上傳大小限制
file_upload_limit 限制使用者一次性最多上傳多少張圖檔,0為不限制
file_queue_error_handler
file_dialog_complete_handler 添加檔案上傳選擇框關閉以後執行的方法
upload_error_handler 檔案上傳錯誤的時候執行的方法
upload_success_handler 檔案上傳成功以後執行的方法
upload_complete_handler 檔案上傳完成以後執行的方法
debug: false 想研究swfupload的可以把這個設定為true,調試模式
接下來就是上傳圖檔的php代碼,我就用的TP的上傳類,簡單,容易懂
<code>function</code> <code>uploadImg() {</code>
<code>import(</code><code>'ORG.Net.UploadFile'</code><code>);</code>
<code>$upload</code> <code>= </code><code>new</code> <code>UploadFile();</code><code>// 執行個體化上傳類</code>
<code>$upload</code><code>->maxSize = 3145728 ;</code><code>// 設定附件上傳大小</code>
<code>$upload</code><code>->allowExts = </code><code>array</code><code>(</code><code>'jpg'</code><code>, </code><code>'gif'</code><code>, </code><code>'png'</code><code>, </code><code>'jpeg'</code><code>);</code><code>// 設定附件上傳類型</code>
<code>$savepath</code><code>=</code><code>'./uploads/'</code><code>.</code><code>date</code><code>(</code><code>'Ymd'</code><code>).</code><code>'/'</code><code>;</code>
<code>if</code> <code>(!</code><code>file_exists</code><code>(</code><code>$savepath</code><code>)){</code>
<code>mkdir</code><code>(</code><code>$savepath</code><code>);</code>
<code>}</code>
<code>$upload</code><code>->savePath = </code><code>$savepath</code><code>;</code><code>// 設定附件上傳目錄</code>
<code>if</code><code>(!</code><code>$upload</code><code>->upload()) {</code><code>// 上傳錯誤提示錯誤資訊</code>
<code>$this</code><code>->error(</code><code>$upload</code><code>->getErrorMsg());</code>
<code>}</code><code>else</code><code>{</code><code>// 上傳成功 擷取上傳檔案資訊</code>
<code>$info</code> <code>= </code><code>$upload</code><code>->getUploadFileInfo();</code>
<code>print_r(J(__ROOT__.</code><code>'/'</code><code>.</code><code>$info</code><code>[0][</code><code>'savepath'</code><code>].</code><code>'/'</code><code>.</code><code>$info</code><code>[0][</code><code>'savename'</code><code>]));</code>
上傳成功以後,echo或者print_r輸出位址,因為他用的是ajax的方式。
預覽區域設定的代碼
<code>function</code> <code>uploadSuccess(file, serverData){</code>
<code>addImage(serverData);</code>
<code>var</code> <code>$svalue=$(</code><code>'form>input[name=s]'</code><code>).val();</code>
<code>if</code><code>($svalue==</code><code>''</code><code>){</code>
<code>$(</code><code>'form>input[name=s]'</code><code>).val(serverData);</code>
<code>}</code><code>else</code><code>{</code>
<code>$(</code><code>'form>input[name=s]'</code><code>).val($svalue+</code><code>"|"</code><code>+serverData);</code>
<code>function</code> <code>addImage(src){</code>
<code>var</code> <code>newElement = </code><code>"<li><img class='content' src='"</code> <code>+ src + </code><code>"' style=\"width:100px;height:100px;\"><img class='button' src="</code><code>+window.path+</code><code>"/images/fancy_close.png></li>"</code><code>;</code>
<code>$(</code><code>"#pic_list"</code><code>).append(newElement);</code>
<code>$(</code><code>"img.button"</code><code>).last().bind(</code><code>"click"</code><code>, del);</code>
serverData就是在php裡傳回的圖檔位址,在傳回以後,直接調用addImage方法,将位址加載到一個ul裡。同時更新隐藏域裡的值
删除圖檔設定
<code>var</code> <code>del = </code><code>function</code><code>(){</code>
<code>// var fid = $(this).parent().prevAll().length + 1;</code>
<code>var</code> <code>src=$(</code><code>this</code><code>).siblings(</code><code>'img'</code><code>).attr(</code><code>'src'</code><code>);</code>
<code>$.ajax({</code>
<code>type: </code><code>"GET"</code><code>, </code><code>//通路WebService使用Post方式請求</code>
<code>url: window.url+</code><code>"/del"</code><code>, </code><code>//調用WebService的位址和方法名稱組合---WsURL/方法名</code>
<code>data: </code><code>"src="</code> <code>+ src,</code>
<code>success: </code><code>function</code><code>(data){</code>
<code>var</code> <code>$val=$svalue.replace(data,</code><code>''</code><code>);</code>
<code>$(</code><code>'form>input[name=s]'</code><code>).val($val);</code>
<code>$(</code><code>this</code><code>).parent().remove();</code>
ajax方式,送出到php方式,成功則更新隐藏域裡的val,并且銷毀元素。
<code>function</code> <code>del() {</code>
<code>$src</code><code>=</code><code>str_replace</code><code>(__ROOT__.</code><code>'/'</code><code>, </code><code>''</code><code>, </code><code>str_replace</code><code>(</code><code>'//'</code><code>, </code><code>'/'</code><code>, </code><code>$_GET</code><code>[</code><code>'src'</code><code>]));</code>
<code>if</code> <code>(</code><code>file_exists</code><code>(</code><code>$src</code><code>)){</code>
<code>unlink(</code><code>$src</code><code>);</code>
<code>print_r(</code><code>$_GET</code><code>[</code><code>'src'</code><code>]);</code>
<code>exit</code><code>();</code>
删除的方法很簡單,就是删除ajax送出過來的位址的檔案,并且傳回删除的位址,ajax會處理并且自動更新隐藏域的val
整個ThinkPHP+swfupload上傳圖檔的方法就完了。很簡單。 ThinkPHP+swfupload多圖上傳執行個體下載下傳連結: http://pan.baidu.com/s/1dD8avap 密碼: 7idq
本文轉自 3147972 51CTO部落格,原文連結:http://blog.51cto.com/a3147972/1381136,如需轉載請自行聯系原作者