以前寫過一篇使用swfupload上傳圖片的文章:週末大放送網站圖片上傳,水印,預覽,截圖,這裏分析一下,當時使用uploadify上傳,沒法獲取上傳後,圖片路徑的問題。當時沒有測試沒有成功,一直憋在內心有點難受,有點完美強迫症了。javascript
相關配置說明,已在代碼中註釋說明,文章結束出提供代碼下載。css
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Wolfy.UploadifyDemo.Default" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 <%-- 首先引入相關的css,js文件 --%> 10 <link href="Uploadify/css/uploadify.css" rel="stylesheet" /> 11 <script src="Uploadify/js/jquery-1.10.2.min.js"></script> 12 <script src="Uploadify/js/uploadify3.2.1/jquery.uploadify.min.js"></script> 13 </head> 14 <body> 15 <form id="form1" runat="server"> 16 <div class="divMain"> 17 <div id="fileQueue"> 18 </div> 19 <input type="file" name="uploadify" id="file_upload" /> 20 <div id="haveupfile"> 21 </div> 22 <div> 23 <div> 24 <a href="javascript:$('#file_upload').uploadify('cancel','*');">取消上傳(將觸發onClearQueue事件)</a> 25 </div> 26 <div> 27 <a href="javascript:$('#file_upload').uploadify('destroy')">銷燬(將調用Destroy)</a> 28 </div> 29 <div> 30 <a href="javascript:$('#file_upload').uploadify('disable', true);">禁用上傳功能</a> 31 </div> 32 <div> 33 <a href="javascript:$('#file_upload').uploadify('disable', false);">啓用上傳功能</a> 34 </div> 35 <p>uploadify中的方法</p> 36 <div> 37 <a href="javascript:$('#file_upload').uploadify('cancel')">取消隊列中第一個文件</a> | <a href="javascript:$('#file_upload').uploadify('cancel', '*')">取消隊列中全部文件</a> | <a href="javascript:$('#file_upload').uploadify('upload', '*')">開始上傳隊列中全部文件</a> 38 </div> 39 <div> 40 <a href="javascript:$('#file_upload').uploadify('destroy')">銷燬Uploadify實例</a> 41 </div> 42 <div> 43 <a href="javascript:$('#file_upload').uploadify('disable', true)">禁用選擇按鈕</a> | <a href="javascript:$('#file_upload').uploadify('disable', false)">啓用選擇按鈕</a> 44 </div> 45 <div> 46 <a href="javascript:changeBtnText()">改變按鈕上面的文字</a> | <a href="javascript:returnBtnText();">讀取按鈕上面的文字</a> 47 </div> 48 <div> 49 <a href="javascript:$('#file_upload').uploadify('upload', '*')">開始上傳</a> | <a href="javascript:$('#file_upload').uploadify('stop')">中止上傳</a> 50 </div> 51 </div> 52 </div> 53 </form> 54 </body> 55 </html> 56 57 <script type="text/javascript"> 58 $(function () { 59 $('#file_upload').uploadify({ 60 'auto': false, //選擇文件後是否自動上傳,默認爲true 61 'buttonClass': 'some-class', 62 //'buttonImage': 'Uploadify/icon/btn.png',//選擇文件按鈕 63 'buttonText': '瀏 覽',//設置按鈕文本 64 //'debug': true,//是否打開調試模式,默認爲false 65 'fileSizeLimit': '5000KB',//單個文件大小,0爲無限制,可接受KB,MB,GB等單位的字符串值 66 'fileTypeDesc': 'Image Files',//文件描述 67 'fileTypeExts': '*.gif; *.jpg; *.png',//容許上傳的文件類型 68 //'formData': { 'someKey': 'someValue', 'someOtherKey': 1 },//傳參數 69 //'height': 50,//按鈕的高度 70 //'itemTemplate': '<div id="${fileID}" class="uploadify-queue-item">\ 71 // <div class="cancel">\ 72 // <a href="javascript:$(\'#${instanceID}\').uploadify(\'cancel\', \'${fileID}\')">X</a>\ 73 // </div>\ 74 // <span class="fileName">${fileName} (${fileSize})</span><span class="data"></span>\ 75 // </div>',//隊列中的每一個項目一個特殊的HTML模板 76 //'method': 'post',//請求方式"get"或者"post",默認爲"post" 77 //'multi': false,//是否容許同時選擇多個文件,默認爲true 78 //'overrideEvents': ['onUploadError'],//不執行某個默認事件如:onUploadError上傳失敗事件 79 //'preventCaching': false,//是否取消緩存,默認爲true沒有緩存 80 //'progressData': 'speed',//上傳進度條顯示,'percentage'or'speed'默認爲'percentage' 81 'queueID': 'fileQueue',//隊列的ID,一個存放上傳文件div的ID 82 //'queueSizeLimit':1,//可同事選擇上傳文件的數量,默認爲999 83 //'removeCompleted': false,//是否移除在隊列中上傳完成的文件,默認爲true 84 //'removeTimeout': 10,//在隊列中上傳完成延遲多少秒移除,默認爲3秒 85 //'requeueErrors': true,//上傳失敗是否從新上傳,默認爲false 86 //'successTimeout': 5,//上傳成功以後等待響應時間swf成功,默認爲30秒 87 'swf': 'Uploadify/js/uploadify3.2.1/uploadify.swf',//FLash文件路徑 88 'uploader': '/UploadHander.ashx',//上傳文件處理後臺頁面 89 //'uploadLimit': 1,//容許上傳最大文件數,超過onUploadError事件被觸發,默認999 90 //'width': 300,//按鈕寬度 91 /**********************************************事件***********************************************************************/ 92 //'onCancel': function (file) {//取消單個文件上傳觸發 93 // alert('The file ' + file.name + ' was cancelled.') 94 //}, 95 //'onClearQueue': function (queueItemCount) {//取消隊列中所用上傳文件觸發 96 // alert(queueItemCount + ' file(s) were removed from the queue'); 97 //}, 98 //'onDestroy': function () {//銷燬觸發 99 // alert('I am getting destroyed!'); 100 //}, 101 //'onDialogClose': function (queueData) {//關閉窗口時觸發 102 // //queueData屬性以下 103 // //filesSelected:在瀏覽文件對話框中選擇文件的數量 104 // //filesQueued:添加到隊列中文件的數量(即沒有返回錯誤) 105 // //filesReplaced:在隊列中替換的文件數 106 // //filesCancelled:文件已被添加到隊列中取消數(不更換) 107 // //filesErrored:返回錯誤的文件數 108 // alert(queueData.filesQueued + ' files were queued of ' + queueData.filesSelected + ' selected files. There are ' + queueData.queueLength + ' total files in the queue.'); 109 //}, 110 //'onDialogOpen': function () {//打開對話框時觸發 111 //}, 112 //'onDisable': function () {//禁用上傳功能觸發 113 // alert('You have disabled Uploadify!'); 114 //}, 115 //'onEnable': function () {//啓用上傳功能觸發 116 // alert('You can use Uploadify again.'); 117 //}, 118 'onFallback': function () {//初始化瀏覽器不兼容觸發 也可監視瀏覽器是否禁用flash播放插件 119 alert('Flash was not detected.'); 120 }, 121 //'onInit': function (instance) {//初始化時觸發 122 // alert('The queue ID is ' + instance.settings.queueID); 123 //}, 124 //'onQueueComplete': function (queueData) {//隊列中全部文件處理完成觸發 125 // //queueData屬性以下 126 // //uploadsSuccessful:上傳的文件數量已順利完成 127 // //uploadsErrored:傳回錯誤的上傳數量 128 // alert(queueData.uploadsSuccessful + ' files were successfully uploaded.'); 129 //}, 130 //'onSelect': function (file) {//選擇文件時觸發 131 // alert('The file ' + file.name + ' was added to the queue.'); 132 //}, 133 //'onSelectError': function () {//選擇文件出現錯誤時觸發,如超出文件大小設置 134 // //返回file 135 // //返回errorCode 136 // //返回errorMsg 137 // //alert(errorCode); 138 // //alert('The file ' + file.name + ' returned an error and was not added to the queue.'); 139 //}, 140 //'onSWFReady': function () {//當Flash對象加載觸發。 141 // alert('The Flash file is ready to go.'); 142 //}, 143 //'onUploadComplete': function (file) {//當上傳完成後是否成功,或返回錯誤爲每一個文件觸發一次 144 // alert('The file ' + file.name + ' finished processing.'); 145 //}, 146 //'onUploadError': function (file, errorCode, errorMsg, errorString) {//上傳文件失敗時觸發 147 // alert('The file ' + file.name + ' could not be uploaded: ' + errorString); 148 //}, 149 //'onUploadProgress': function (file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal) {//上傳進度數據 150 // $('#progress').html(totalBytesUploaded + ' bytes uploaded of ' + totalBytesTotal + ' bytes.'); 151 //}, 152 //'onUploadStart': function (file) {//開始上傳觸發 153 // alert('Starting to upload ' + file.name); 154 //}, 155 //'onUploadSuccess': function (file, data, response) {//上傳成功後觸發,每一個文件都觸發 156 // alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data); 157 //} 158 }); 159 }); 160 function changeBtnText() { 161 $('#file_upload').uploadify('settings', 'buttonText', 'BROWSE'); 162 } 163 164 function returnBtnText() { 165 alert('The button says ' + $('#file_upload').uploadify('settings', 'buttonText')); 166 } 167 </script>
IE9中兼容性視圖模式瀏覽
html
而後單擊開始上傳,會報以下錯誤:java
那麼,如何解決這個問題呢?首先想到的就是兼容性的問題,經測試在IE8,IE9(9)下是正常的,IE7和IE9兼容性視圖下不行。jquery
若是在IE9下,禁用flashplayer就會出現上述的錯誤:瀏覽器
若是禁用flash object,在ie9下刷新,會觸發uploadify的onFallback事件:緩存
而後單擊上傳,出現ide
可見uploadify上傳文件跟客戶端瀏覽器是否禁用flash有關。在ie7下,測試有的電腦上能夠,有的不能夠,猜測是否跟flash版本有關?讓人很無語。post
ie7下可採用這種設置:測試
將uploadify的onUploadSuccess事件取消註釋,上傳圖片:
處理上傳圖片的通常處理程序:
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Web; 6 7 namespace Wolfy.UploadifyDemo 8 { 9 /// <summary> 10 /// UploadHander 的摘要說明 11 /// </summary> 12 public class UploadHander : IHttpHandler 13 { 14 15 public void ProcessRequest(HttpContext context) 16 { 17 context.Response.ContentType = "text/plain"; 18 HttpPostedFile file = context.Request.Files["Filedata"]; 19 string uploadPath = context.Request.MapPath("/UploadFile/"); 20 if (file != null) 21 { 22 //新文件名 23 string filename = DateTime.Now.ToString("yyyyMMddhhmmss") + "_" + Path.GetFileName(file.FileName); 24 file.SaveAs(uploadPath + filename); 25 context.Response.Write("/UploadFile/" + filename); 26 } 27 else 28 { 29 context.Response.Write("0"); 30 } 31 } 32 33 public bool IsReusable 34 { 35 get 36 { 37 return false; 38 } 39 } 40 } 41 }
將uploadify經常使用到的配置信息,總結在一個頁面中,用到哪一個就將哪一個的註釋去掉就能夠了,不用再去百度或google了。若是能幫到你,不妨推薦一下!
代碼下載,猛戳這裏:http://pan.baidu.com/s/1ntv20Dr