富頭像編輯器是一個很好的頭像圖片上傳控件,能夠對圖片進行簡單的處理,例如:剪切、調節亮度等功能;富頭像編輯器擁有很的參數配置,可根據自己的需要配置控件的功能;該控件要求瀏覽器需安裝Flash Player后才能使用;下面是我做的一個小的Demo以說明富頭像編輯器的使用方法。
1.前台頁面
需引用js文件和初始化富頭像編輯器,腳本代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Simple demo</title>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="/swfobject/swfobject.js"></script>
<script type="text/javascript" src="/swfobject/fullAvatarEditor.js"></script>
</head>
<body>
<div style="width: 800px; margin: 0 auto;">
<h1 style="text-align: center">富頭像上傳編輯器演示</h1>
<div>
<p id="swfContainer">
本組件需要安裝Flash Player后才可使用,請從
<a href="http://www.adobe.com/go/getflashplayer">這里</a>
下載安裝。
</p>
</div>
@* <button type="button" id="upload">自定義上傳按鈕</button>*@
</div>
<script type="text/javascript">
//控件參數參考:http://www.fullavatareditor.com/api.html#usage
swfobject.addDomLoadEvent(function () {
var swf = new fullAvatarEditor("swfContainer", {
id: 'swf',
upload_url: '/Home/UploadAction',
// src_url: "/samplePictures/Default.jpg",//默認加載的原圖片的url
src_upload: 2,//默認為0;是否上傳原圖片的選項,有以下值:0:不上傳;1:上傳;2 :顯示復選框由用戶選擇
isShowUploadResultIcon: false,//在上傳完成時(無論成功和失敗),是否顯示表示上傳結果的圖標
src_size: "2MB",//選擇的本地圖片文件所允許的最大值,必須帶單位,如888Byte,88KB,8MB
src_size_over_limit: "文件大小超出2MB,請重新選擇圖片。",//當選擇的原圖片文件的大小超出指定最大值時的提示文本。可使用占位符{0}表示選擇的原圖片文件的大小。
src_box_width: "300",//原圖編輯框的寬度
src_box_height: "300",//原圖編輯框的高度
tab_visible: false,//是否顯示選項卡*
browse_box_width: "300",//圖片選擇框的寬度
browse_box_height: "300",//圖片選擇框的高度
avatar_sizes: "200*200",//100*100|50*50|32*32,表示一組或多組頭像的尺寸。其間用"|"號分隔。
}, function (msg) {
switch (msg.code) {
// case 1: alert("頁面成功加載了組件!"); break;
// case 2: alert("已成功加載默認指定的圖片到編輯面板。"); break;
case 3:
if (msg.type == 0) {
alert("攝像頭已准備就緒且用戶已允許使用。");
}
else if (msg.type == 1) {
alert("攝像頭已准備就緒但用戶未允許使用!");
}
else {
alert("攝像頭被占用!");
}
break;
case 5:
if (msg.type == 0) {
if (msg.content.sourceUrl) {
alert("原圖片已成功保存至服務器,url為:\n" + msg.content.sourceUrl);
}
alert("頭像已成功保存至服務器,url為:\n" + msg.content.avatarUrls.join("\n"));
}
break;
}
}
);
document.getElementById("upload").onclick = function () {
swf.call("upload");
};
});
</script>
</body>
</html>
2.后台代碼
后台是對提交過來的文件進行保存處理並返回相應的結果,代碼如下:
public ActionResult UploadAction() { Result result = new Result(); result.avatarUrls = new ArrayList(); result.success = false; result.msg = "Failure!"; //取服務器時間+8位隨機碼作為部分文件名,確保文件名無重復。 string fileName = DateTime.Now.ToString("yyyyMMddhhmmssff") + HelpClass.CreateRandomCode(8); //定義一個變量用以儲存當前頭像的序號 int avatarNumber = 1; //遍歷所有文件域 foreach (string fieldName in Request.Files.AllKeys) { HttpPostedFileBase file = Request.Files[fieldName]; //原始圖片(file 域的名稱:__source,如果客戶端定義可以上傳的話,可在此處理)。 if (fieldName == "__source") { result.sourceUrl = string.Format("/upload/csharp_source_{0}.jpg", fileName); file.SaveAs(Server.MapPath(result.sourceUrl)); } //頭像圖片(file 域的名稱:__avatar1,2,3...)。 else { string virtualPath = string.Format("/upload/csharp_avatar{0}_{1}.jpg", avatarNumber, fileName); result.avatarUrls.Add(virtualPath); file.SaveAs(Server.MapPath(virtualPath)); avatarNumber++; } } result.success = true; result.msg = "Success!"; //返回圖片的保存結果(返回內容為json字符串,可自行構造,該處使用Newtonsoft.Json構造) // Response.Write(JsonConvert.SerializeObject(result)); return Json(result); } 接收參數的一個類: using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace MvcApplication1.Models { public class Result { /// <summary> /// 表示圖片是否已上傳成功。 /// </summary> public bool success; /// <summary> /// 自定義的附加消息。 /// </summary> public string msg; /// <summary> /// 表示原始圖片的保存地址。 /// </summary> public string sourceUrl; /// <summary> /// 表示所有頭像圖片的保存地址,該變量為一個數組。 /// </summary> public ArrayList avatarUrls; } public class HelpClass { /// <summary> /// 生成指定長度的隨機碼。 /// </summary> public static string CreateRandomCode(int length) { string[] codes = new string[36] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; StringBuilder randomCode = new StringBuilder(); Random rand = new Random(); for (int i = 0; i < length; i++) { randomCode.Append(codes[rand.Next(codes.Length)]); } return randomCode.ToString(); } } }
3.下面是運行后的效果圖


