webform的原生操作圖片預覽和上傳


1.使用input標簽進行圖片操作,input的標簽有一個accept屬性,accept 屬性只能與 <input type="file"> 配合使用。它規定能夠通過文件上傳進行提交的文件類型,多個屬性值使用逗號分隔<input accept="audio/*,video/*,image/*">。 

如果想使用瀏覽器原生特性實現文件上傳(如圖片)效果,父級的form元素有個東西不能丟,就是:enctype="multipart/form-data" enctype屬性規定在發送到服務器之前應該如何對表單數據進行編碼,默認的編碼是:”application/x-www-form-urlencoded“。對於普通數據是挺適用的,但是,對於文件什么的,就不能亂編碼了,該什么就是什么,只能使用multipart/form-data作為enctype屬性值。

html代碼:

              <div class="detail-item">
                            <form action="" enctype="multipart/form-data" id="formData2">
                                <span class="item-tit" style="margin-top: 22px;">頭像</span>
                            <ul class="clearfix list-unstyled pic-list">
                                <li>
                                    <img id="imgName" ms-attr-src="UserData.Files"  style="width: 120px; height: 150px; border-radius: 3px;">
                                </li>
                                <li>
                                    <span class="info"><input id="file" class="filepath" onchange="changepic(this)" type="file" accept="image/*" /></span>
                                    <span class="info"><input type="button" id="uploadbt" ms-click="UploadImage()" style="background-image:url(/ViewV5/JS/jquery.uploadify-v2.1.0/kssc.png); width:75px; height:28px; border:0px; cursor:pointer" /></span>
                                   
                                    <input type="hidden" id="imgPath" ms-duplex="UserData.Files"/>
                                </li>
                            </ul>
                            </form>
                        </div>

2.圖片預覽

就是替換img的src;而讀取URL有filereader 和 URL.createObjectURL 兩種預覽方式。這兩種方式可以獲得上傳圖片的名字(name)

    //圖片預覽 
    function changepic() {
        //var reads = new FileReader();
        //var f = document.getElementById('file').files[0];
        //reads.readAsDataURL(f);
        //reads.οnlοad = function(e) {
        //    document.getElementById('imgName').src = this.result;
        //};
        var newsrc = getObjectURL(document.getElementById('file').files[0]);
        document.getElementById('imgName').src = newsrc;
    }
    //建立一個可存取到該file的url
    function getObjectURL(file) {
        var url = null ;
        // 下面函數執行的效果是一樣的,只是需要針對不同的瀏覽器執行不同的 js 函數而已
        if (window.createObjectURL!=undefined) { // basic
            url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
            url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
            url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
    }

3.圖片上傳

前端js:

  UploadImage: function (e) {
            var ofile = $("#file").get(0).files[0];
            var formData = new FormData();
            if (!ofile) { 
                alert('請上傳文件');
                return; 
            }
            var size = ofile.size / 1024 / 1024;
            if (size > 1) {
                alert('文件不能大於1M');
                return;
            }
            formData.append("file", ofile);//這個是文件,這里只是演示上傳了一個文件,如果要上傳多個的話將[0]去掉
            formData.append("F_ID", $("#F_ID").val());//這個是上傳的其他參數
            $.ajax({
                url: '/ViewV5/Base/UploadTX.ashx',
                type: 'POST',
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                processData: false,
                success: function (msg) {
                    if (msg) {
                        var obj = JSON.parse(msg);
                        if (obj.success) {
                            $("#imgPath").val(obj.sourceUrl);
                        }
                        top.ComFunJS.winsuccess("操作成功");
                    }
                },
                error: function (msg) {
                    console.log(msg);
                }
            });
        }

后端:上傳到網站根目錄下,並返回相對路徑需要提交表單的時候保存到數據庫。

HttpFileCollection files = HttpContext.Current.Request.Files;
            if (files.Count>0)
            {
                UpSaveImg(context,files[0]);
            }
/// <summary>
        /// 新的上傳方法
        /// </summary>
        /// <param name="file"></param>
        public void UpSaveImg(HttpContext context,HttpPostedFile file)
        {
            try
            {
                if (file.ContentLength > 1000 * 1024)
            {
                context.Response.Write("{\"statusCode\":\"300\", \"message\":\"文件過大,限制1M以內!\"}");
                return;
            }
            Result result = new Result();
            result.success = false;
            result.msg = "Failure!";
            string tx_path = HttpContext.Current.Server.MapPath(UploadFile);//獲取文件上傳路徑
            TXFileHelper.CreateDir(tx_path);
            string fileName = DateTime.Now.ToString("yyyyMMddhhmmssff") + CreateRandomCode(8);
            file.SaveAs(tx_path + fileName + ".jpg");
            result.success = true;
            result.msg = "sucess";
            result.sourceUrl = tx_path + fileName + ".jpg";
            result.sourceUrl = @"\images" + Regex.Split(result.sourceUrl, "images", RegexOptions.IgnoreCase)[1] ;//圖片的相對路徑
            //返回圖片的保存結果(返回內容為json字符串,可自行構造,該處使用Newtonsoft.Json構造)
            context.Response.Write(JsonConvert.SerializeObject(result));
            }
            catch (Exception ex)
            {
            context.Response.Write(ex.Message.ToString() + ex.StackTrace);
        }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM