溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用.net mvc+layui實(shí)現(xiàn)圖片上傳功能

發(fā)布時(shí)間:2021-08-31 09:53:25 來(lái)源:億速云 閱讀:164 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“怎么用.net mvc+layui實(shí)現(xiàn)圖片上傳功能”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么用.net mvc+layui實(shí)現(xiàn)圖片上傳功能”吧!

圖片上傳和展示是互聯(lián)網(wǎng)應(yīng)用中比較常見(jiàn)的一個(gè)功能,本文圖片上傳功能前端用到的圖片上傳控件是layui ,數(shù)據(jù)庫(kù)是用的 sql server ,code first開(kāi)發(fā)模式。

一、創(chuàng)建表

因?yàn)閳D片上傳之后需要保存路徑等信息,所以,得先建一個(gè)Image表,表的設(shè)計(jì)為如下:

下面看實(shí)體類(lèi)和上下文的代碼:

1.新建實(shí)體類(lèi)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>        /// 上傳時(shí)間        /// </summary>        public DateTime UploadTime { get; set; }        /// <summary>        /// 備注        /// </summary>        [MaxLength(200)]        public string Remark { get; set; }        /// <summary>        /// 是否刪除        /// </summary>        public bool IsDelete { get; set; }    }}

2.將實(shí)體類(lèi)添加到上下文:

如圖:

代碼:

MyDbContext.cs

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

如果你和我一樣是code first開(kāi)發(fā)模式的話,那讓程序跑一遍,這個(gè)數(shù)據(jù)表就應(yīng)該在你的數(shù)據(jù)庫(kù)里生成了,哈哈,這只是一個(gè)建表的過(guò)程,只要表能建好,什么模式都好,哈哈。

二、前端代碼

1.新建控制器ImageUploadController.cs,然后創(chuàng)建一個(gè)視圖Index.cshtml:

這里會(huì)用到layui的圖片上傳,關(guān)于這部分的代碼使用,可以自行去layui官網(wǎng)查看:https://www.layui.com/demo/upload.html;

以下是頁(yè)面圖片,以及代碼:

這是還沒(méi)編寫(xiě)后臺(tái)上傳圖片代碼時(shí)的頁(yè)面圖片:

以下是前端代碼:

@{    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">圖片標(biāo)題</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <input type="text" name="ImageTitle" lay-verify="required" placeholder="圖片標(biāo)題" 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="請(qǐng)輸入內(nèi)容" 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")', //上傳地址,后臺(tái)的某個(gè)控制器            before: function (obj) {                obj.preview(function (index, file, result) {                    $('#demo1').attr('src', result);                });            }, //長(zhǎng)傳之前執(zhí)行的代碼,將需要上傳的圖片顯示在頁(yè)面上            done: function (res) {                if (res.Result) {                }            }, //上傳成功后的回傳數(shù)據(jù),后臺(tái)代碼未編寫(xiě),此處尚為寫(xiě)任何內(nèi)容,將在后面的內(nèi)容中補(bǔ)上            error: function () {                //演示失敗狀態(tài),并實(shí)現(xiàn)重傳                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>

三、后臺(tái)代碼及前端代碼完善

接下來(lái)在上面代碼所示的后臺(tái)鏈接()中編寫(xiě)圖片上傳代碼:

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

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)//如果不存在就創(chuàng)建images文件夾         {             System.IO.Directory.CreateDirectory(Server.MapPath("/Images/"));         }         string path = Server.MapPath("/Images/"); //path為某個(gè)文件夾的絕對(duì)路徑,不要直接保存到數(shù)據(jù)庫(kù)     //    string path = "F:\\TgeoSmart\\Image\\";         //生成新文件的名稱,guid保證某一時(shí)刻內(nèi)圖片名唯一(文件不會(huì)被覆蓋)         string fileNewName = Guid.NewGuid().ToString();         string ImageUrl = path + fileNewName + extName;         //SaveAs將文件保存到指定文件夾中         file.SaveAs(ImageUrl);         //此路徑為相對(duì)路徑,只有把相對(duì)路徑保存到數(shù)據(jù)庫(kù)中圖片才能正確顯示(不加~為相對(duì)路徑)         string url = "\\Images\\" + fileNewName + extName;         return Json(new         {             Result = true,             Data = url         });     }     catch (Exception exception)     {         return Json(new         {             Result = false,             exception.Message         });     } }

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

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

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

上面代碼中,我并沒(méi)有直接保存imageUrl到數(shù)據(jù)庫(kù)中,另外生成一個(gè)相對(duì)路徑保存圖片,原因就是這個(gè)。

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

@{    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">圖片標(biāo)題</label>            <div class="layui-input-block" style="width: 554px; position: relative;">                <input type="text" name="ImageTitle" lay-verify="required" placeholder="圖片標(biāo)題" 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="請(qǐng)輸入內(nèi)容" 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) {          //新增代碼,將回傳的圖片保存路徑進(jìn)行保存并將圖片綁定到上傳后圖片展示處                    imageUrl = res.Data;                    $("#demo2").attr("src", imageUrl);                }            },            error: function () {                //演示失敗狀態(tài),并實(shí)現(xiàn)重傳                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();                });            }        });    });//新增代碼,將完整的信息傳到后臺(tái)保存    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>

然后,補(bǔ)齊后端信息保存的代碼:

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實(shí)現(xiàn)圖片上傳功能”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么用.net mvc+layui實(shí)現(xiàn)圖片上傳功能這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI