最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于ajax實現(xiàn)上傳圖片代碼示例解析

 更新時間:2020年12月03日 08:37:42   作者:王者歸來!  
這篇文章主要介紹了基于ajax實現(xiàn)上傳圖片代碼示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

js源碼:

/// <reference path="jquery-1.8.3.js" /> 
/// <reference path="ajaxForm/jquery.form.js" /> 
 
/*! 
 * jQuery upload 
 * 用于上傳單個文件,上傳成功后,返回文件路徑。 
 * 本插件依賴jQuery,jquery.form 請在使用時引入依賴的文件 
 * 
 * Date: 2014/4/23 
 */ 
/* 
使用: 
html: 
<div style="width: 100%; float: left;"> 
  <input type="hidden" id="hfThumbnail" value="/uploads/2014/04/23/635338686611432716.jpg" /> 
  <div class="imgdiv"></div> 
  <span class="img_span"> 
    <input type="file" name="file" /> 
  </span> 
   
  <input type="button" value="上傳" class="upload" /> 
</div> 
<div style="width: 100%; float: left;"> 
  <input type="hidden" id="hfThumbnail" value="/uploads/2014/04/23/635338686611432716.jpg" /> 
  <div class="imgdiv"></div> 
  <span class="img_span"> 
    <input type="file" name="file" /> 
  </span> 
   
  <input type="button" value="上傳" class="upload" /> 
</div> 
 
js: 
 
$(document).ready(function () { 
     
  //$(".upload").upload({ 
  //  uploadData: { id: "12233" }, 
  //  successFn: function (response, statusText, xhr, $this) { 
  //    alert(response.Data.RelativePath) 
  //  }, 
  //  deleteData: { id: function () { return "asdfasdf" } } 
  //}); 
  
  $(".upload").upload({ 
    uploadData: { id: "12233" }, 
    successFn: "success",      //可以是字符串 
    deleteData: { id: function () { return "asdfasdf" } } 
  }); 
}); 
 
//上傳成功后執(zhí)行該函數(shù) 
function success(response, statusText, xhr, $this) { 
  //比如插入編輯器 
  alert(response.Data.RelativePath + $this.attr("value")) 
} 
*/ 
 
(function ($) { 
  $.extend($.fn, { 
    upload: function (settings) { 
 
      var options = $.extend({ 
        fileType: "gif|jpg|jpeg|png|bmp",            //允許的文件格式 
        uploadUrl: "/ajax/handler.ashx?action=uploadfile",   //上傳URL地址 
        deleteUrl: "/ajax/handler.ashx?action=deletefile",   //刪除URL地址 
        width: "",                       //圖片顯示的寬度 
        height: 100,                      //圖片顯示的高度 
        imgSelector: ".imgdiv",                 //圖片選擇器 
        uploadData: {},                     //上傳時需要附加的參數(shù) 
        deleteData: {},                     //刪除時需要附加的參數(shù) 
        deleteFn: function ($parent, showMessage) {       //刪除圖片的方法(默認方法使用POST提交) 
          methods.deleteImage($parent, showMessage); 
        }, 
        beforeSubmitFn: "beforeUpload",             //上傳前執(zhí)行的方法 原型 beforeSubmit(arr, $form, options); 
        successFn: "uploadSuccess",               //上傳成功后執(zhí)行的方法 uploadSuccess(response, statusText, xhr, $this) 
        errorFn: "uploadError"                 //上傳失敗后執(zhí)行的方法 
      }, settings); 
 
      //上傳準備函數(shù) 
      var methods = { 
        //驗證文件格式 
        checkFile: function (filename) { 
          var pos = filename.lastIndexOf("."); 
          var str = filename.substring(pos, filename.length); 
          var str1 = str.toLowerCase(); 
          if (typeof options.fileType !== 'string') { options.fileType = "gif|jpg|jpeg|png|bmp"; } 
          var re = new RegExp("\.(" + options.fileType + ")$"); 
          return re.test(str1); 
        }, 
        //創(chuàng)建表單 
        createForm: function () { 
          var $form = document.createElement("form"); 
          $form.action = options.uploadUrl; 
          $form.method = "post"; 
          $form.enctype = "multipart/form-data"; 
          $form.style.display = "none"; 
          //將表單加當document上, 
          document.body.appendChild($form); //創(chuàng)建表單后一定要加上這句否則得到的form不能上傳。document后要加上body,否則火狐下不行。 
          return $($form); 
        }, 
        //創(chuàng)建圖片 
        createImage: function () { 
          //不能用 new Image() 來創(chuàng)建圖片,否則ie下不能改變img 的寬高 
          var img = $(document.createElement("img")); 
          img.attr({ "title": "雙擊圖片可刪除圖片!" }); 
          if (options.width !== "") { 
            img.attr({ "width": options.width }); 
          } 
          if (options.height !== "") { 
            img.attr({ "height": options.height }); 
          } 
          return img; 
        }, 
        showImage: function (filePath, $parent) { 
          var $img = methods.createImage(); 
          $parent.find(options.imgSelector).find("img").remove(); 
          //要先append再給img賦值,否則在ie下不能縮小寬度。 
          $img.appendTo($parent.find(options.imgSelector)); 
          $img.attr("src", filePath); 
          this.bindDelete($parent); 
        }, 
        bindDelete: function ($parent) { 
          $parent.find(options.imgSelector).find("img").bind("dblclick", function () { 
            options.deleteFn($parent, true); 
          }); 
        }, 
        deleteImage: function ($parent, showMessage) { 
          var $fileInput = $parent.find("input:hidden"); 
          if ($fileInput.val() !== "") { 
 
            var data = $.extend(options.deleteData, { filePath: $fileInput.val(), t: Math.random() }); 
 
            $.post(options.deleteUrl, data, function (response) { 
 
              if (showMessage) { alert(response.MessageContent) } 
 
              if (response.MessageType == 1) { 
                $fileInput.val(""); 
                $parent.find(options.imgSelector).find("img").remove(); 
              } 
            }, "JSON"); 
          } 
        }, 
        onload: function ($parent) { 
          var hiddenInput = $parent.find("input:hidden"); 
          if (typeof hiddenInput !== "undefined" && hiddenInput.val() !== "") { 
            var img = methods.createImage(); 
            if ($parent.find(options.imgSelector).find("img").length > 0) { $parent.find(options.imgSelector).find("img").remove(); } 
            //要先append再給img賦值,否則在ie下不能縮小寬度。  
            img.appendTo($parent.find(options.imgSelector)); 
            img.attr("src", hiddenInput.val()); 
            methods.bindDelete($parent); 
          } 
        } 
      }; 
      //上傳主函數(shù) 
      this.each(function () { 
        var $this = $(this); 
        methods.onload($this.parent()); 
        $this.bind("click", function () { 
          var $fileInput = $(this).parent().find("input:file"); 
          var fileBox = $fileInput.parent(); 
 
          if ($fileInput.val() === "") { 
            alert("請選擇要上傳的圖片!"); 
            return false; 
          } 
          //驗證圖片 
          if (!methods.checkFile($fileInput.val())) { 
            alert("文件格式不正確,只能上傳格式為:" + options.fileType + "的文件。"); 
            return false; 
          } 
          //若隱藏域中有圖片,先刪除圖片 
          if ($fileInput.val() !== "") { 
            options.deleteFn($this.parent(), false); 
            //methods.deleteImage($this.parent(), false); 
          } 
 
          //創(chuàng)建表單 
          var $form = methods.createForm(); 
 
          //把上傳控件附加到表單 
          $fileInput.appendTo($form); 
          fileBox.html("<img src=\"/admin/styles/images/loading.gif\" />  正在上傳... "); 
          $this.attr("disabled", true); 
 
          //構建ajaxSubmit參數(shù) 
          var data = {}; 
          data.data = options.uploadData; 
          data.type = "POST"; 
          data.dataType = "JSON"; 
          //上傳前 
          data.beforeSubmit = function (arr, $form, options) { 
 
            var beforeSubmitFn; 
            try { beforeSubmitFn = eval(options.beforeSubmitFn) } catch (err) { }; 
            if (beforeSubmitFn) { 
              var $result = beforeSubmitFn(arr, $form, options); 
              if (typeof ($result) == "boolean") 
                return $result; 
            } 
          }; 
          //上傳失敗 
          data.error = function (response, statusText, xhr, $form) { 
            var errorFn; 
            try { errorFn = eval(options.errorFn) } catch (err) { }; 
            if (errorFn) { 
              errorFn(response.responseText, statusText, xhr, $this); 
            } 
          }; 
          //上傳成功 
          data.success = function (response, statusText, xhr, $form) { 
            //response = eval("(" + response + ")"); 
            if (response.MessageType == 1) { 
              methods.showImage(response.Data.RelativePath, $this.parent()); 
              $this.parent().find("input:hidden").val(response.Data.RelativePath); 
 
              var successFn; 
              try { successFn = eval(options.successFn) } catch (err) { }; 
              if (successFn) { 
                $.ajaxSetup({ cache: false });//這個不能少,否則ie下會提示下載 
                successFn(response, statusText, xhr, $this); 
              } 
 
 
            } else { 
              alert(response.MessageContent); 
            } 
            $this.attr("disabled", false); 
            fileBox.html("<input type=\"file\" name=\"file\" />"); 
            $form.remove(); 
          }; 
 
          try { 
            //開始ajax提交表單 
            $form.ajaxSubmit(data); 
          } catch (e) { 
            alert(e.message); 
          } 
        }); 
      }); 
    } 
  }); 
})(jQuery) 

html代碼:

<!DOCTYPE html> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script src="Scripts/jquery/jquery-1.8.3.js"></script> 
<script src="Scripts/jquery/ajaxForm/jquery.form.js"></script> 
<script src="Scripts/jquery/jquery.upload.js"></script> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div style="width: 100%; float: left;"> 
  <input type="hidden" id="hfThumbnail" value="/uploads/2014/04/23/635338686611432716.jpg" /> 
  <div class="imgdiv"></div> 
  <span class="img_span"> 
    <input type="file" name="file" /> 
  </span> 
    
  <input type="button" value="上傳" class="upload" /> 
</div> 
<div style="width: 100%; float: left;"> 
  <input type="hidden" id="hfThumbnail" value="/uploads/2014/04/23/635338686611432716.jpg" /> 
  <div class="imgdiv"></div> 
  <span class="img_span"> 
    <input type="file" name="file" /> 
  </span> 
    
  <input type="button" value="上傳" class="upload" /> 
</div> 
</form> 
<script type="text/javascript"> 
  $(document).ready(function () { 
    //$(".upload").upload({ 
    //  uploadData: { id: "12233" }, 
    //  successFn: function (response, statusText, xhr, $this) { 
    //    alert(response.Data.RelativePath) 
    //  }, 
    //  deleteData: { id: function () { return "asdfasdf" } } 
    //}); 
    $(".upload").upload({ 
      uploadData: { id: "12233" }, 
      successFn: "success", 
      deleteData: { id: function () { return "asdfasdf" } } 
    }); 
  }); 
 
  //上傳成功后執(zhí)行該函數(shù) 
  function success(response, statusText, xhr, $this) { 
    //比如插入編輯器 
    alert(response.Data.RelativePath + $this.attr("value")) 
  } 
</script> 
</body> 
</html> 

服務器端使用一般處理程序:

public void ProcessRequest(HttpContext context) 
{ 
  context.Response.ContentType = "application/json"; 
  var action = context.Request.QueryString.Get<string>("action").ToLower(); 
  var response = new JsonResult(StatusMessageType.Error, "沒有權限或無效請求。").ToJson(); 
  switch (action) 
  { 
 
    case "uploadfile": 
      if (context.Request.Files.Count > 0) 
        response = UploadFile(context.Request); 
      break; 
    case "deletefile": 
      response = DeleteFile(context.Request.Form); 
      break; 
    default: 
      break; 
  } 
  context.Response.Write(response); 
} 
/// <summary> 
///  
/// </summary> 
/// <param name="file"></param> 
/// <returns></returns> 
private string UploadFile(HttpRequest request) 
{ 
  if (request.Files.Count == 0) 
    return new JsonResult(StatusMessageType.Error, "沒有可處理的數(shù)據(jù)。").ToJson(); 
  var id = request.Form.Get<string>("id", ""); 
 
  var file = request.Files[0]; 
  if (file == null || file.ContentLength <= 0 || string.IsNullOrEmpty(file.FileName)) 
    return new JsonResult(StatusMessageType.Error, "沒有可處理的數(shù)據(jù)。").ToJson(); 
 
  //IStoreFile storeFile = null; 
 
  string[] datePaths = new string[] { "~/uploads/" }; 
  datePaths = datePaths.Union(DateTime.Now.ToString("yyyy-MM-dd").Split('-')).ToArray(); 
  var relativePath = storeProvider.JoinDirectory(datePaths); 
 
  var dirPath = HttpContext.Current.Server.MapPath(relativePath); 
 
  if (!System.IO.Directory.Exists(dirPath)) 
    System.IO.Directory.CreateDirectory(dirPath); 
 
  var fileName = GenerateFileName(Path.GetExtension(file.FileName)); 
 
  var filePath = Path.Combine(dirPath, fileName); 
  file.SaveAs(filePath); 
  return new JsonResult(StatusMessageType.Success, "上傳成功。", new 
  { 
    RelativePath = WebUtility.ResolveUrl(Path.Combine(relativePath, fileName)), 
    Size = file.ContentLength, 
    Id = id, 
  }).ToJson(); 
} 
 
public string DeleteFile(NameValueCollection form) 
{ 
  var filePath = form.Get<string>("filePath", "").Trim(); 
  if (string.IsNullOrEmpty(filePath)) 
    return new JsonResult(StatusMessageType.Error, "無效提交。").ToJson(); 
 
  try 
  { 
    if (System.IO.File.Exists(HttpContext.Current.Server.MapPath(filePath))) 
    { 
      System.IO.File.Delete(HttpContext.Current.Server.MapPath(filePath)); 
      return new JsonResult(StatusMessageType.Success, "文件刪除成功。").ToJson(); 
    } 
    else 
    { 
      return new JsonResult(StatusMessageType.Success, "找不到該文件。").ToJson(); 
    } 
  } 
  catch (Exception) 
  { 
    return new JsonResult(StatusMessageType.Hint, "發(fā)生錯誤。").ToJson(); 
  } 
} 
 
/// <summary> 
/// 生成隨機文件名 
/// </summary> 
/// <returns></returns> 
private string GenerateFileName(string extension) 
{ 
  return DateTime.Now.Ticks.ToString() + extension; 
} 

程序使用的是framework4.0,所以使用了一些擴展方法。

JsonTesult類代碼:

[Serializable] 
public class JsonResult 
{ 
  private StatusMessageType _messageType; 
  private string _messageContent; 
 
 
  /// <summary> 
  ///  
  /// </summary> 
  /// <param name="messageType"></param> 
  /// <param name="messageContent"></param> 
  /// <param name="data"></param> 
  public JsonResult(StatusMessageType messageType, string messageContent, object data = null) 
  { 
    _messageType = messageType; 
    _messageContent = messageContent; 
    Data = data; 
  } 
 
  public StatusMessageType MessageType 
  { 
    get { return _messageType; } 
    set { _messageType = value; } 
  } 
 
  public string MessageContent 
  { 
    get { return _messageContent; } 
    set { _messageContent = value; } 
  } 
 
  public object Data { get; set; } 
 
  public string ToJson() 
  { 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(this); 
 
    //string p = @"\\/Date(\d+)\\/"; 
    //MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); 
    //Regex reg = new Regex(p); 
    //json = reg.Replace(json, matchEvaluator); 
    return json; 
  } 
 
  private static string ConvertJsonDateToDateString(Match m) 
  { 
    string result = string.Empty; 
    DateTime dt = new DateTime(1970, 1, 1); 
    dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); 
    dt = dt.ToLocalTime(); 
    result = dt.ToString("d"); 
    return result; 
  } 
} 

StatusMessageType枚舉類:

/// <summary> 
/// 提示消息類別 
/// </summary> 
public enum StatusMessageType 
{ 
  /// <summary> 
  /// 權限不足 
  /// </summary> 
  NoAccess = -2, 
  /// <summary> 
  /// 錯誤 
  /// </summary> 
  Error = -1, 
  /// <summary> 
  /// 成功 
  /// </summary> 
  Success = 1, 
 
  /// <summary> 
  /// 提示信息 
  /// </summary> 
  Hint = 0 
} 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • javascript在當前窗口關閉前檢測窗口是否關閉

    javascript在當前窗口關閉前檢測窗口是否關閉

    檢測窗口是否關閉,在當前窗口關閉前使用js做到這一點,下面是具體的實現(xiàn),感興趣的朋友可以參考下
    2014-09-09
  • uniapp實現(xiàn)可以左右滑動導航欄

    uniapp實現(xiàn)可以左右滑動導航欄

    這篇文章主要為大家詳細介紹了uniapp 實現(xiàn)可以左右滑動導航欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于zepto.js簡單實現(xiàn)上傳圖片

    基于zepto.js簡單實現(xiàn)上傳圖片

    這篇文章主要介紹了基于zepto.js簡單實現(xiàn)上傳圖片的相關資料,需要的朋友可以參考下
    2016-06-06
  • Javascript實現(xiàn)視頻文件播放功能(示例詳解)

    Javascript實現(xiàn)視頻文件播放功能(示例詳解)

    這篇文章主要介紹了Javascript實現(xiàn)視頻文件播放功能,使用CSS完成相應的布局樣式,利用JavaScript函數(shù)來監(jiān)聽進度條,然后使用鼠標點擊按鈕實現(xiàn)對視頻的播放,需要的朋友可以參考下
    2023-10-10
  • JavaScript中concat復制數(shù)組方法淺析

    JavaScript中concat復制數(shù)組方法淺析

    在本篇文章里小編給大家總結了關于JavaScript中concat復制數(shù)組方法知識點,有需要的朋友們可以學習下。
    2019-01-01
  • 小程序實現(xiàn)五星點評效果

    小程序實現(xiàn)五星點評效果

    這篇文章主要為大家詳細介紹了小程序實現(xiàn)五星點評效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Input文本框隨著輸入內容多少自動延伸的實現(xiàn)

    Input文本框隨著輸入內容多少自動延伸的實現(xiàn)

    下面小編就為大家?guī)硪黄狪nput文本框隨著輸入內容多少自動延伸的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 用javascript獲取textarea中的光標位置

    用javascript獲取textarea中的光標位置

    Javascript一向以他的靈活隨意而著稱,這也使得它的功能可以非常的強大,而由于沒有比較好的調試工具,又使得它使用起來困難重重,尤其使對于一些初學者,更是感覺到無從下手。今天探討的問題是用javascript獲取textarea中光標的位置。
    2008-05-05
  • JavaScript 模擬用戶單擊事件

    JavaScript 模擬用戶單擊事件

    單擊一個按鈕或超鏈接,然后會出現(xiàn)其他的超鏈接,這時要讓其中的一個超鏈接被單擊,以顯示一個初始頁面。(公司頁面使用了frameset)很顯然,之后的超鏈接單擊事件需要通過JavaScript來觸發(fā)。
    2009-12-12
  • 使用堆實現(xiàn)Top K算法(JS實現(xiàn))

    使用堆實現(xiàn)Top K算法(JS實現(xiàn))

    這篇文章主要介紹了使用堆實現(xiàn)Top K算法,即JS實現(xiàn),文中詳細介紹了Top K算法,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評論

嘉黎县| 南澳县| 沁阳市| 象山县| 繁峙县| 西峡县| 凉城县| 永寿县| 钟山县| 绥德县| 扶风县| 丰县| 蓬溪县| 武清区| 汉川市| 岳西县| 那坡县| 察雅县| 济南市| 凯里市| 行唐县| 鄢陵县| 尼勒克县| 扎兰屯市| 桃江县| 桂林市| 田阳县| 珠海市| 宝丰县| 兴宁市| 西和县| 柏乡县| 沙坪坝区| 扶沟县| 夏河县| 白河县| 广宗县| 巴彦县| 静乐县| 建平县| 静安区|