日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

JQuery实现ajax批量上传图片

發布時間:2024/6/21 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 JQuery实现ajax批量上传图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果不適合放首頁,請管理員早撤,謝謝!

在網上搜索了一下,發現以jquery+ajax方式實現單張圖片上傳的代碼是有的,但實現批量上傳圖片的程序卻沒搜索到,于是根據搜索到的代碼,寫了一個可以批量上傳的。

先看效果圖

點擊增加按鈕,會增加一個選擇框,如下圖:

選擇要上傳的圖片,效果圖如下:

上傳成功如下圖:

下面來看代碼:

前臺html主要代碼:

<button id="SubUpload" class="ManagerButton" onClick="TSubmitUploadImageFile();return false;">確定上傳</button>

<button id="CancelUpload" class="ManagerButton" onClick="javascript:history.go(-1);">取消</button>

<button id="AddUpload" class="ManagerButton" onClick="TAddFileUpload();return false;">增加</button>

<tr><td class="tdClass">

         圖片1:

         </td><td class="tdClass">

         <input name="" size="60" id="uploadImg1" type="file" />

         <span id="uploadImgState1"></span>

         </td></tr>
 

因為用了JQuery,所以你完全可以把click事件放在js文件中

“增加”按鈕js代碼

var TfileUploadNum=1; //記錄圖片選擇框個數

var Tnum=1; //ajax上傳圖片時索引

         function TAddFileUpload()

         {

                   var idnum = TfileUploadNum+1;

                   var str="<tr><td class='tdClass'>圖片"+idnum+":</td>";

                   str += "<td class='tdClass'><input name='' size='60' id='uploadImg"+idnum+"' type='file' /><span id='uploadImgState"+idnum+"'>";

                   str += "</span></td></tr>";

                   $("#imgTable").append(str);

                   TfileUploadNum += 1;

         }
 

 

 

 

 

 

 

 

 

 

 

“確定上傳”按鈕js代碼:

 
function TSubmitUploadImageFile()

         {

                  M("SubUpload").disabled=true;

                   M("CancelUpload").disabled=true;

                   M("AddUpload").disabled=true;

                   setTimeout("TajaxFileUpload()",1000);//此為關鍵代碼

}
 

關于setTimeout("TajaxFileUpload()",1000);這句代碼:因為所謂的批量上傳,其實還是一個一個的上傳,給用戶的只是一個假象。只所以要延時執行TajaxFileUpload(),是因為在把圖片上傳到服務器上時,我在后臺給圖片重新命名了,命名的規則是,如下代碼:

Random rd = new Random();

StringBuilder serial = new StringBuilder();

serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));

serial.Append(rd.Next(0, 999999).ToString());

return serial.ToString();
 

即使我命名精確到毫秒,另外再加上隨機數,可是還是有上傳的第二張圖片把上傳的第一張圖片覆蓋的情況出現。所以此處我設置了延時1秒后在上傳下一張圖片。剛開始做這個東西的時候,用的是for循環,來把所有的圖片一個一個的循環地用ajax上傳,可是for循環速度太快了,可能第一張圖片還沒來得及ajax,第二張就被for過來了,還是有第二張覆蓋第一張的情況出現。

下面來看TajaxFileUpload()函數,代碼如下:

function TajaxFileUpload()

         {

                   if(Tnum<TfileUploadNum+1)

                   {

                            //準備提交處理

                            $("#uploadImgState"+Tnum).html("<img src=../images/loading.gif />");

                            //開始提交

                            $.ajax

                            ({

                                     type: "POST",

                                     url:"http://localhost/ajaxText2/Handler1.ashx",

                                     data:{upfile:$("#uploadImg"+Tnum).val(),category:$("#pcategory").val()},

                                     success:function (data, status)

                                     {

                                               //alert(data);

                                               var stringArray = data.split("|");

                                               

                                               if(stringArray[0]=="1")

                                               {

                                                        //stringArray[0]    成功狀態(1為成功,0為失敗)

                                                        //stringArray[1]    上傳成功的文件名

                                                        //stringArray[2]    消息提示

                                                        $("#uploadImgState"+Tnum).html("<img src=../images/note_ok.gif />");//+stringArray[1]+"|"+stringArray[2]);

                                               }            

                                               else

                                               {

                                                        //上傳出錯

                                                        $("#uploadImgState"+Tnum).html("<img src=../images/note_error.gif />"+stringArray[2]);//+stringArray[2]+"");

                                               }

                                               Tnum++;

                                             setTimeout("TSubmitUploadImageFile()",0);

                                      }

                             });                      

                   }

         }
 

上面的代碼沒什么可說的,很容易看懂。下面來看Handler1.ashx(一般處理程序)如何來處理post過來的圖片的(此代碼來自網上,具體地址忘記了),下面只給出關鍵代碼,全部代碼在附件里。

string _fileNamePath = "";

            try

            {

                _fileNamePath = context.Request.Form["upfile"];

                //開始上傳

                string _savedFileResult = UpLoadFile(_fileNamePath);

                context.Response.Write(_savedFileResult);

            }

            catch

            {

                context.Response.Write("0|error|上傳提交出錯");

            }
 
 
 

 

 

 

 

 

 

 

 

 

 

 

2、

  

//生成將要保存的隨機文件名

string fileName = GetFileName() + fileNameExt;

//物理完整路徑                    

string toFileFullPath = HttpContext.Current.Server.MapPath(toFilePath);

//檢查是否有該路徑 沒有就創建

if (!Directory.Exists(toFileFullPath))

{

     Directory.CreateDirectory(toFileFullPath);

}

///創建WebClient實例       

WebClient myWebClient = new WebClient();

//設定windows網絡安全認證   方法1

myWebClient.Credentials = CredentialCache.DefaultCredentials;

//要上傳的文件       

FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);

//FileStream fs = OpenFile();       

BinaryReader r = new BinaryReader(fs);

//使用UploadFile方法可以用下面的格式       

//myWebClient.UploadFile(toFile, "PUT",fileNamePath);       

byte[] postArray = r.ReadBytes((int)fs.Length);

Stream postStream = myWebClient.OpenWrite(toFile, "PUT");

if (postStream.CanWrite)

{

postStream.Write(postArray, 0, postArray.Length);

}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、檢查是否合法的上傳文件

  

private bool CheckFileExt(string _fileExt)

{

     string[] allowExt = new string[] { ".gif", ".jpg", ".jpeg" };

     for (int i = 0; i < allowExt.Length; i++)

     {

         if (allowExt[i] == _fileExt) { return true; }

     }

    return false;

}
 
4、生成要保存的隨即文件名
 

 

 

 

 

 

 

 

 

   

public static string GetFileName()

{

            Random rd = new Random();

            StringBuilder serial = new StringBuilder();

            serial.Append(DateTime.Now.ToString("yyyyMMddHHmmssff"));

            serial.Append(rd.Next(0, 999999).ToString());

            return serial.ToString();

}
 

Ok,基本上這個批量上傳圖片的JQuery+ajax方式實現的程序完成了。如果你要上傳word文檔,pdf文件,只要稍作修改,就可以實現了。

PS:這篇文章請N人路過!個人認為,博客園首頁的文章是應該放那些適合中層程序員的,少放些N人寫的文章,因為訪問博客園的用戶大多還是中層程序員,如果

都放哪些很N的文章,只有N人能看懂的文章,那博客園一天的訪問量能有幾個N呢?

今天多嘴了,見諒!

本文轉載自:http://www.cnblogs.com/Jayan/archive/2009/03/31/1425897.html

如果這篇文章對您有幫助,您可以打賞我

技術交流QQ群:15129679

總結

以上是生活随笔為你收集整理的JQuery实现ajax批量上传图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。