jQuery+ASP.NET的AJAX檔案上傳

科技小能手發表於2017-11-13

ajaxUpFile.ashx 服務端處理

Default.aspx 使用者提交


下面貼出主要程式碼:

JS部分程式碼如下

function TestUp()

{

ajaxFileUpload(“FileUpload1”);

}


function ajaxFileUpload(obfile_id)

{

//準備提交處理

$(“#loading_msg”).html(“<img src=/images/DotAjax.gif />”);


//開始提交

$.ajax

({

type: “POST”,
url:”ajaxUpFile.ashx“,

data:”upfile=”+$(“#”+obfile_id).val(),

success:function (data, status)



//alert(data);

var stringArray = data.split(“|”);

if(stringArray[0]==”1″)

{

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

//stringArray[1] 上傳成功的檔名

//stringArray[2] 訊息提示

$(“#divmsg”).html(“<img src=/images/note_ok.gif />”+stringArray[2]+” 檔案地址:”+stringArray[1]);

$(“#filepreview”).attr({ src:stringArray[1]});



else

{

//上傳出錯

$(“#divmsg”).html(“<img src=/images/note_error.gif />”+stringArray[2]+””);

}


$(“#loading_msg”).html(“”);

},

error:function (data, status, e)

{

alert(“上傳失敗:”+e.toString());

}

});

return false; //.NET按鈕控制元件取消提交

}

C#程式碼部分:

/// <summary>

/// 上傳檔案 方法

/// </summary>

/// <param name=”fileNamePath”></param>

/// <param name=”toFilePath”></param>

/// <returns>返回上傳處理結果 格式說明: 0|file.jpg|msg 成功狀態|檔名|訊息 </returns>

public string UpLoadFile(string fileNamePath, string toFilePath)

{

try

{

//獲取要儲存的檔案資訊

FileInfo file = new FileInfo(fileNamePath);

//獲得副檔名

string fileNameExt = file.Extension;

//驗證合法的檔案

if (CheckFileExt(fileNameExt))

{

//生成將要儲存的隨機檔名

string fileName = GetFileName() + fileNameExt;

//檢查儲存的路徑 是否有/結尾

if (toFilePath.EndsWith(“/”) == false) toFilePath = toFilePath + “/”;

//按日期歸類儲存

string datePath = DateTime.Now.ToString(“yyyyMM”) + “/” + DateTime.Now.ToString(“dd”) + “/”;

if (true)

{

toFilePath += datePath;

}

//獲得要儲存的檔案路徑

string serverFileName = toFilePath + fileName;

//物理完整路徑 

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


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

if (!Directory.Exists(toFileFullPath))

{

Directory.CreateDirectory(toFileFullPath);

}

//將要儲存的完整檔名 

string toFile = toFileFullPath + fileName;

///建立WebClient例項 

WebClient myWebClient = new WebClient();

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

myWebClient.Credentials = CredentialCache.DefaultCredentials;

////設定windows網路安全認證 方法2

//NetworkCredential cred = new NetworkCredential(“UserName”, “UserPWD”);

//CredentialCache cache = new CredentialCache();

//cache.Add(new Uri(“UploadPath”), “Basic”, cred);

//myWebClient.Credentials = cache;

//要上傳的檔案 

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);

}

else

{

return “0|” + serverFileName + “|” + “檔案目前不可寫”;

}

postStream.Close();



return “1|” + serverFileName + “|” + “檔案上傳成功”;

}

else

{

return “0|errorfile|” + “檔案格式非法”;

}

}

catch (Exception e)

{

return “0|errorfile|” + “檔案上傳失敗,錯誤原因:” + e.Message;

}

}

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1081625


相關文章