用Flash控件上傳圖片與Ajax請求服務器截取圖片

  
  
  
  
  1. 首先要把JqueryUI裏面的JS文件與CSS樣式給放到項目中的目錄裏面,建一個Web應用程序把下面的給放到<head>標籤裏面
  1. <link href="../Css/jquery-ui-1.8.2.custom.css" rel="stylesheet" type="text/css" /> 
  2.     <link href="../Css/default.css" rel="stylesheet" type="text/css" /> 
  3.     <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 
  4.     <script type="text/javascript" src="/SWFUpload/swfupload.js"></script> 
  5.     <script type="text/javascript" src="/SWFUpload/handlers.js"></script> 
  6.     <script src="js/jquery-1.7.2.js" type="text/javascript"></script> 
  7.     <script src="../SWFUpload/jquery-ui-1.8.2.custom.min.js" type="text/javascript"></script> 
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> : 這個是IE裏面的兼容問題,若是說是IE7以上的版本瀏覽器會在搜索框後面,有一個像被破壞的圖標,一點就會讓瀏覽器兼容Flash 控件了。 其他的依次引入就能夠了。 
  
  
  
  
  1. <script type="text/javascript"
  2.        var swfu; 
  3.        window.onload = function () {
  4.            swfu = new SWFUpload({ //這個在Jquery文檔中有這個方法
  5.                // Backend Settings 
     //注意這是要請求的通常處理程序後面加了一個問號action=up。在後面會詳細說到的
    
  6.                upload_url: "/ashx/CutHeaderPhoto.ashx?action=up",
    
  7.                post_params: { 
  1.                    "ASPSESSID""<%=Session.SessionID %>" 
  2.                }, 
  3.                // File Upload Settings 
  4.                file_size_limit: "2 MB", //說上傳的文件規定大小
  5.                file_types: "*.jpg;*.gif", //上傳文件的格式
  6.                file_types_description: "JPG Images", //上傳文件的類型
  7.                file_upload_limit: 0,    // Zero means unlimited 
  8.                // Event Handler Settings - these functions as defined in Handlers.js 
  9.                //  The handlers are not part of SWFUpload but are part of my website and control how 
  10.                //  my website reacts to the SWFUpload events. 
  11.                swfupload_preload_handler: preLoad, 
  12.                swfupload_load_failed_handler: loadFailed, 
  13.                file_queue_error_handler: fileQueueError, 
  14.                file_dialog_complete_handler: fileDialogComplete, 
  15.                upload_progress_handler: uploadProgress, 
  16.                upload_error_handler: uploadError, 
  17.                upload_success_handler: ShowData, 
  18.                upload_complete_handler: uploadComplete, 
  19.                // Button settings 
  20.                button_p_w_picpath_url: "/SWFUpload/p_w_picpaths/XPButtonNoText_160x22.png"
  21.                button_placeholder_id: "spanButtonPlaceholder"
  22.                button_width: 160, 
  23.                button_height: 22, 
  24.                button_text: '<span class="button">擇上傳的圖片<span class="buttonSmall">(2MB Max)</span></span>'
  25.                button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }'
  26.                button_text_top_padding: 1, 
  27.                button_text_left_padding: 5, 
  28.                // Flash Settings 
  29.                flash_url: "/SWFUpload/swfupload.swf"// Relative to this file 
  30.                flash9_url: "/SWFUpload/swfupload_FP9.swf"// Relative to this file 
  31.                custom_settings: { 
  32.                    upload_target: "divFileProgressContainer" 
  33.                }, 
  34.                // Debug Settings 
  35.                debug: false 
  36.            }); 
  37.        } 
  
  
  
  
  1. //處理圖片上傳和截取圖片的通常處理程序,在前面說到了爲何要定義一個全局的 [var str] 當上傳圖片成功的
  2. //的時候會把圖片存到磁盤上,但是當截取的時候還還要取出圖片,當執行上傳圖片的時候,
     string fileName = Path.GetFileName(file.FileName);這fileName爲當前上傳的圖片, 當截取圖片的時候,再一次執行這個通常處理程序fileName裏面這時就爲空了,因此取不到值。因此在前臺前 定義一個變量來保存上傳成功的圖片,當執行圖片截取的時候,fileName裏面就有了上次成功傳的圖片了。  //取到文件的提交方式,是上傳文件仍是截取文件 
          
          
          
          
    1.            string action=context.Request["action"];//不明確是上傳圖片還截取圖片 
    2.            //當這個action==up的時候說明是上傳圖片 
    3.            if (action == "up"
    4.            {  
    5.                //建立一個單獨訪問文件的對象,FileData是Jquery封裝好的 
    6.                HttpPostedFile file=context.Request.Files["Filedata"]; 
    7.                //返回字符串file的路徑和擴展名 
    8.                string fileName = Path.GetFileName(file.FileName); 
    9.                //獲得這個字符串file的擴展名 
    10.                string fileExt = Path.GetExtension(fileName); 
    11.                //判斷圖片的後綴名 
    12.                if (fileExt == ".jpg"
    13.                { 
    14.                    //用Image來建立一個對象,用流的方式輸出這個圖片file.InputStream 
    15.                    using (Image img = Image.FromStream(file.InputStream)) 
    16.                    { 
    17.                        //獲得圖片的物理路徑,把圖片保存起來 
    18.                        file.SaveAs(context.Server.MapPath("/UploadImages/"+fileName)); 
    19.                        //獲得圖片的大小 
    20.                        context.Response.Write("ok:/UploadImages/"+fileName+":"+img.Width+":"+img.Height); 
    21.                    } 
    22.                } 
    23.                    //是cut就是說明是截取圖片 
    24.                else if (action == "cut"){  
    25.                //來取到x,y,width,height 
    26.                    int x=Convert.ToInt32(context.Request.Form["x"]); 
    27.                    int y=Convert.ToInt32(context.Request.Form["y"]); 
    28.                    int width=Convert.ToInt32(context.Request.Form["width"]); 
    29.                    int height=Convert.ToInt32(context.Request.Form["height"]); 
    30.                    string imgSrc = context.Request.Form["imgSrc"]; 
    31.                    //建立一個畫板對象 
    32.                    using (Bitmap map =new Bitmap(width, height)) 
    33.                    {  
    34.                        //建立一個畫筆,並且是在這Bitmap上面畫的因此要用Graphics.FromImage(map) 
    35.                        using (Graphics g = Graphics.FromImage(map)) 
    36.                        { 
    37.                            //建立一個圖片的對象,取到這個要在那裏顯示截取的圖上 
    38.                            using (Image img = Image.FromFile(context.Request.MapPath(imgSrc))) 
    39.                            { 
    40.                                //用這個畫筆來取到這個要畫的圖片的大小和位置 
    41.                                g.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel); 
    42.                                //給截取的圖片從新定義一個名字給存起來 
    43.                                string newName = Guid.NewGuid().ToString().Substring(0,10); 
    44.                                map.Save(context.Server.MapPath("/UploadImages/"+newName+".jpg")); 
    45.                                context.Response.Write(context.Server.MapPath("/UploadImages/" + newName + ".jpg")); 
    46.                            } 
    47.                        } 
    48.                    } 
    49.                } 
    50.            } 
  3.      
    //定義一個全局的變量來接收服務器端傳回的數據。 //上傳圖片
  4.  var str; 
  5.        //參數爲文件,有服務器端的數據 
  6.        function ShowData(file, serverData) { 
  7.            str = serverData.split(":"); //把這個數據從冒號截取 
  8.            if (str[0] == "ok") { //當這個 數據等於Ok的時候 
  9.            //在這個層裏面顯示圖片內容,定義圖片的寬和高 
  10.                $("#ImgContentId").css("backgroundImage""url(" + str[1] + ")").css("width", str[2] + "px").css("height", str[3] + "px"); 
  11.            } 
  12.        } 
  
  
  
  
  1. //定義一個方法匿名方法  //這裏是截取圖片的位置大小,
  2.        $(function () { 
  3.            //截取圖片裏面  要引用一個draggable和resizable這兩個是Jquery定義好的 
  4.            $("#CutPhotoId").draggable({ containment: 'parent' }).resizable({ containment: 'parent' }); 
  5.            //點擊這個按鈕就截取圖片 
  6.            $("#btnCutPhotoId").click(function () { 
  7.                //取到這個截取圖片層的x,y軸與寬和高 
  8.                var y = $("#CutPhotoId").offset().top - $("#ImgContentId").offset().top; 
  9.                var x = $("#CutPhotoId").offset().left - $("#ImgContentId").offset().left; 
  10.                var width = $("#CutPhotoId").width(); 
  11.                var height = $("#CutPhotoId").height(); 
  12.                //用Ajax的異步請求 post提交數據 
  13.                $.post("/ashx/CutHeaderPhoto.ashx", { "action""cut""x": parseInt(x), "y": parseInt(y), "width": parseInt(width), "height": parseInt(height), imgSrc: str[1] }, function (data) { 
  14.                    $("#imgSrcId").attr("src",data); 
  15.                }); 
  16.            }); 
  17.        }); 
  
  
  
  
  1. <form id="form1" runat="server"> //這是表單
  2.    <div id="content"> 
  3.        <div id="swfu_container" style="margin: 0px 10px;"> 
  4.            <div> 
  5.                <span id="spanButtonPlaceholder"></span> 
  6.            </div> 
  7.            <div id="divFileProgressContainer" style="height: 75px;"> 
  8.            </div> 
  9.            <div id="ImgContentId" style="width: 300px; height: 300px"> 
  10.                <div id="CutPhotoId" style="width: 100px; height: 100px; border: 1px solid red"> 
  11.                </div> 
  12.            </div> 
  13.            <input type="button" value="截取頭像" id="btnCutPhotoId" />&nbsp;&nbsp; 
  14.            <img id="imgSrcId" alt="美圖"/> 
  15.        </div> 
  16.    </div> 
  17.    </form>
相關文章
相關標籤/搜索