中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用.net mvc+layui實現圖片上傳功能

發布時間:2021-08-31 09:53:25 來源:億速云 閱讀:165 作者:chen 欄目:開發技術

這篇文章主要講解了“怎么用.net mvc+layui實現圖片上傳功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用.net mvc+layui實現圖片上傳功能”吧!

圖片上傳和展示是互聯網應用中比較常見的一個功能,本文圖片上傳功能前端用到的圖片上傳控件是layui ,數據庫是用的 sql server ,code first開發模式。

一、創建表

因為圖片上傳之后需要保存路徑等信息,所以,得先建一個Image表,表的設計為如下:

下面看實體類和上下文的代碼:

1.新建實體類Image.cs

如圖:

代碼如下:

Image.cs

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Modules{    [Table("Info_Image")]    public class Image    {        public Image() {            IsDelete = false;        }        /// <summary>        /// 主鍵id        /// </summary>        public Guid Id { get; set; }        /// <summary>        /// 圖片名        /// </summary>        [Required]        [MaxLength(50)]        public string Name { get; set; }        /// <summary>        /// 圖片保存鏈接        /// </summary>        [Required]        [MaxLength(50)]        public string Url { get; set; }        /// <summary>        /// 上傳時間        /// </summary>        public DateTime UploadTime { get; set; }        /// <summary>        /// 備注        /// </summary>        [MaxLength(200)]        public string Remark { get; set; }        /// <summary>        /// 是否刪除        /// </summary>        public bool IsDelete { get; set; }    }}

2.將實體類添加到上下文:

如圖:

代碼:

MyDbContext.cs

  public DbSet<Image> Images { get; set; }

如果你和我一樣是code first開發模式的話,那讓程序跑一遍,這個數據表就應該在你的數據庫里生成了,哈哈,這只是一個建表的過程,只要表能建好,什么模式都好,哈哈。

二、前端代碼

1.新建控制器ImageUploadController.cs,然后創建一個視圖Index.cshtml:

這里會用到layui的圖片上傳,關于這部分的代碼使用,可以自行去layui官網查看:https://www.layui.com/demo/upload.html;

以下是頁面圖片,以及代碼:

這是還沒編寫后臺上傳圖片代碼時的頁面圖片:

以下是前端代碼:

@{    Layout = "../Shared/_TopLayout.cshtml";}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>Index</title></head><body>    <div id="picUpload">        <div class="layui-form-item">            <label class="layui-form-label required">圖片標題</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <input type="text" name="ImageTitle" lay-verify="required" placeholder="圖片標題" autocomplete="off" class="layui-input" id="ITitle">            </div>        </div>        <div class="layui-form-item">            <label class="layui-form-label">備注</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <textarea placeholder="請輸入內容" class="layui-textarea" name="Remark"></textarea>            </div>        </div>        <div class="layui-form-item">            <div class="layui-upload">                <label class="layui-form-label">上傳圖片</label>                <button type="button" class="layui-btn" id="test1">上傳圖片</button>                <div class="layui-upload-list">                    <label class="layui-form-label">圖片展示</label>                    <img class="layui-upload-img" id="demo1" style="width:200px;height:auto;">                    <p id="demoText"></p>                </div>            </div>        </div>             </div></body></html><script type="text/javascript">    layui.use('upload', function () {        var $ = layui.jquery;        var upload = layui.upload;        //普通圖片上傳        var uploadInst = upload.render({            elem: '#test1',            url: '@Url.Action("Upload","ImageUpload")', //上傳地址,后臺的某個控制器            before: function (obj) {                obj.preview(function (index, file, result) {                    $('#demo1').attr('src', result);                });            }, //長傳之前執行的代碼,將需要上傳的圖片顯示在頁面上            done: function (res) {                if (res.Result) {                }            }, //上傳成功后的回傳數據,后臺代碼未編寫,此處尚為寫任何內容,將在后面的內容中補上            error: function () {                //演示失敗狀態,并實現重傳                var demoText = $('#demoText');                demoText.html('<span style="color: #FF5722;">上傳失敗</span> <a class="layui-btn layui-btn-xs demo-reload">重試</a>');                demoText.find('.demo-reload').on('click', function () {                    uploadInst.upload();                });            }        });    });</script>

三、后臺代碼及前端代碼完善

接下來在上面代碼所示的后臺鏈接()中編寫圖片上傳代碼:

下面先貼出代碼,然后再講解上傳思路:

ImageUploadController.cs

/// <summary> /// 上傳圖片 /// </summary> /// <returns></returns> public ActionResult Upload() {     try     {         HttpFileCollectionBase files = Request.Files;         HttpPostedFileBase file = files[0];         //獲取文件名后綴         string extName = Path.GetExtension(file.FileName).ToLower();         //獲取保存目錄的物理路徑         if (System.IO.Directory.Exists(Server.MapPath("/Images/")) == false)//如果不存在就創建images文件夾         {             System.IO.Directory.CreateDirectory(Server.MapPath("/Images/"));         }         string path = Server.MapPath("/Images/"); //path為某個文件夾的絕對路徑,不要直接保存到數據庫     //    string path = "F:\\TgeoSmart\\Image\\";         //生成新文件的名稱,guid保證某一時刻內圖片名唯一(文件不會被覆蓋)         string fileNewName = Guid.NewGuid().ToString();         string ImageUrl = path + fileNewName + extName;         //SaveAs將文件保存到指定文件夾中         file.SaveAs(ImageUrl);         //此路徑為相對路徑,只有把相對路徑保存到數據庫中圖片才能正確顯示(不加~為相對路徑)         string url = "\\Images\\" + fileNewName + extName;         return Json(new         {             Result = true,             Data = url         });     }     catch (Exception exception)     {         return Json(new         {             Result = false,             exception.Message         });     } }

上面一段代碼里有詳細的注釋信息,這里需要注意的是,我們保存圖片的路徑的問題。

Server.MapPath()函數獲取的是某個文件夾的絕對路徑,關于這個函數的一些用法我百度一份截圖貼在這里:

Server.MapPath()獲取的是圖片的絕對路徑,而實際調用圖片時,考慮到網站安全性問題,瀏覽器并不允許我們的頁面使用絕對路徑去獲取圖片資源,因此,在數據庫中保存的路徑只能是相對路徑,也就是代碼中這一句的作用:

上面代碼中,我并沒有直接保存imageUrl到數據庫中,另外生成一個相對路徑保存圖片,原因就是這個。

下面給出完整的前端代碼,包括圖片上傳的改進和所有信息的保存:

@{    Layout = "../Shared/_TopLayout.cshtml";}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>Index</title></head><body>    <div id="picUpload"><!--新增代碼,添加信息保存按鈕-->        <div class="layui-form-item sel-fixed-right">            <div class="layui-input-block">                <input type="button" class="layui-btn layui-btn-small layui-btn-normal" value="保存" onclick="saveInfo()" />            </div>        </div>        <div class="layui-form-item">            <label class="layui-form-label required">圖片標題</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <input type="text" name="ImageTitle" lay-verify="required" placeholder="圖片標題" autocomplete="off" class="layui-input" id="iTitle">            </div>        </div>        <div class="layui-form-item">            <label class="layui-form-label">備注</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <textarea placeholder="請輸入內容" class="layui-textarea" name="Remark" id="iRemark"></textarea>            </div>        </div>        <div class="layui-form-item">            <div class="layui-upload">                <label class="layui-form-label">上傳圖片</label>                <button type="button" class="layui-btn" id="test1">上傳圖片</button>                <div class="layui-upload-list">                    <label class="layui-form-label">圖片上傳前展示</label>                    <img class="layui-upload-img" id="demo1" style="width:200px;height:auto;">                    <p id="demoText"></p>                                  </div><!--新增代碼,上傳后圖片顯示 -- >                <div class="layui-upload-list">                    <label class="layui-form-label">圖片上傳后展示</label>                    <img class="layui-upload-img" id="demo2" style="width:200px;height:auto;">                </div>            </div>       </div>    </div></body></html><script type="text/javascript">    var imageUrl;//新增代碼,保存上傳圖片后回傳的圖片路徑    layui.use('upload', function () {        var $ = layui.jquery;        var upload = layui.upload;        //普通圖片上傳        var uploadInst = upload.render({            elem: '#test1',            url: '@Url.Action("Upload","ImageUpload")',            before: function (obj) {                obj.preview(function (index, file, result) {                    $('#demo1').attr('src', result);                });            },            done: function (res) {                if (res.Result) {          //新增代碼,將回傳的圖片保存路徑進行保存并將圖片綁定到上傳后圖片展示處                    imageUrl = res.Data;                    $("#demo2").attr("src", imageUrl);                }            },            error: function () {                //演示失敗狀態,并實現重傳                var demoText = $('#demoText');                demoText.html('<span style="color: #FF5722;">上傳失敗</span> <a class="layui-btn layui-btn-xs demo-reload">重試</a>');                demoText.find('.demo-reload').on('click', function () {                    uploadInst.upload();                });            }        });    });//新增代碼,將完整的信息傳到后臺保存    var saveInfo = function () {        $.ajax({            type: 'post',            url: '@Url.Action("Save", "ImageUpload")',            dataType: 'json',            data: {                title: $("#iTitle").val(),                remark: $("#iRemark").val(),                url:imageUrl            },            success: function (res) {                if (res.Result) {                    alert("保存成功");                }            }        });    }</script>

然后,補齊后端信息保存的代碼:

public ActionResult Save(string title,string remark,string url) {     try     {         var imageInfo = new ImageInfo() {             Id = Guid.NewGuid(),             Name = title,             Url = url,             Remark = remark,             UploadTime = DateTime.Now.ToLocalTime()         };         context.ImageInfos.Add(imageInfo);         context.SaveChanges();         return Json(new{             Result = true         });     } catch (Exception exception)     {         return Json(new {             Result = true,             exception.Message         });     } }

感謝各位的閱讀,以上就是“怎么用.net mvc+layui實現圖片上傳功能”的內容了,經過本文的學習后,相信大家對怎么用.net mvc+layui實現圖片上傳功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木乃县| 鸡西市| 新沂市| 开平市| 麟游县| 镇雄县| 梨树县| 东乌珠穆沁旗| 炎陵县| 资溪县| 邵阳市| 石首市| 原阳县| 西和县| 芜湖县| 澄江县| 高邮市| 蓬溪县| 元江| 南漳县| 三台县| 中西区| 铁岭县| 余江县| 成武县| 全椒县| 南澳县| 扶绥县| 清远市| 郯城县| 贵溪市| 敖汉旗| 富川| 芒康县| 望江县| 同江市| 秀山| 郑州市| 游戏| 长垣县| 盐源县|