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

来源:https://www.cnblogs.com/qinyi173/archive/2019/09/18/11545139.html
-Advertisement-
Play Games

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


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

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 安裝 Namesrv 拉取鏡像 docker pull rocketmqinc/rocketmq:4.4.0` docker run d p 9876:9876 v {RmHome}/data/namesrv/logs:/root/logs v {RmHome}/data/namesrv/st ...
  • 面試題 redis 的過期策略都有哪些?記憶體淘汰機制都有哪些?手寫一下 LRU 代碼實現? 面試官心理分析 如果你連這個問題都不知道,上來就懵了,回答不出來,那線上你寫代碼的時候,想當然的認為寫進 redis 的數據就一定會存在,後面導致系統各種 bug,誰來負責? 常見的有兩個問題: 往 redi ...
  • 之前都是用Eclipse,今天試了下IntelliJ IDEA,搭建了一個Spring Boot 2的Hello world項目。 ...
  • 一.if語句 1.if語句 作用:讓程式根據條件選擇性地執行某條語句或某些語句 說明:if語句又叫條件語句,也叫分支語句 語法: 語法說明: elif子句可以有0個,1個或多個 else子句可以有0個或1個且只能放在此if語句的最後 要求:if語句內部的語句通常要以4個空格的縮進來表示包含關係,相同 ...
  • 1.首先在你的路由文件定義好訪問的路徑 2. ...
  • Exceptionless是一款日誌記錄框架,它開源、免費、提供管理界面、易於安裝和使用。ExceptionLess底層採用ElasticSearch作為日誌存儲,提供了快速、豐富的查詢API,方便我們進行系統集成。本文將介紹ExceptionLess的常見用法。 安裝ExceptionLess 在 ...
  • C#伺服器全面講解與製作一 環境配置與基礎架構 環境配置 基礎的伺服器架構 環境配置 基礎的伺服器架構 這裡我會講解高級的C#伺服器的全面製作流程 會對大家有很大的幫助 不過在這個教程中主要是講解伺服器的製作,所以不會講解客戶端的製作,不過會提供相關客戶端的代碼。 1 環境配置 1.1 VS cod ...
  • 表達式樹練習實踐:C 運算符 [TOC] 在 C 中,算術運算符,有以下類型 算術運算符 關係運算符 邏輯運算符 位運算符 賦值運算符 其他運算符 這些運算符根據參數的多少,可以分作一元運算符、二元運算符、三元運算符。本文將圍繞這些運算符,演示如何使用表達式樹進行操作。 對於一元運算符和二元運算符的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...