欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET MVC解決上傳圖片臟數(shù)據(jù)的方法

 更新時間:2022年09月11日 12:04:59   作者:Darren Ji  
這篇文章介紹了ASP.NET MVC解決上傳圖片臟數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在"在ASP.NET MVC下實現(xiàn)單個圖片上傳, 客戶端服務(wù)端雙重限制圖片大小和格式, 服務(wù)端裁剪圖片"中,已經(jīng)實現(xiàn)了在客戶端和服務(wù)端限制圖片大小和格式,以及在服務(wù)端裁剪圖片。但還有一個重要的話題是需要面對的,那就是圖片臟數(shù)據(jù)問題。

假設(shè)用戶添加產(chǎn)品信息,并且上傳了圖片,可之后用戶沒有點擊頁面上的添加按鈕,這就導(dǎo)致上傳圖片成為"臟數(shù)據(jù)",存在著卻一直不會被使用。解決這個問題的大致思路是:

  • 在上傳圖片的時候,把圖片保存到一個臨時文件夾,或者叫緩存文件夾
  • 當(dāng)用戶真正保存的時候,再把臨時文件夾的圖片拷貝到最終目標(biāo)文件夾

假設(shè),有這樣的一個Model,它的ImageUrl屬性,用來存放圖片真正的相對路徑。

    public class ImgVm
    {
        [Required(ErrorMessage = "必填")]
        public string ImageUrl { get; set; }
    }

在HomeController中,存在如下的一些Action:

  • 提供一個顯示上傳頁面的Action,并且是ImgVm類型的強類型視圖,ImgVm的ImageUrl屬性用來存放上傳圖片的相對路徑
  • 提供一個接收ImgVm類型的Action,把臨時文件夾內(nèi)的圖片復(fù)制到目標(biāo)文件夾內(nèi),并且給ImgVm的ImageUrl屬性賦上新的圖片相對路徑
        public ActionResult Index()
        {
            return View(new ImgVm());
        }
        [HttpPost]
        public ActionResult Index(ImgVm imgVm)
        {
            if (ModelState.IsValid)
            {
                //目標(biāo)文件夾路徑
                string pathForRealSaving = Server.MapPath("~/RealUpload/");
                //目標(biāo)文件夾內(nèi)的用戶文件夾路徑
                string pathForRealUserSaving = Server.MapPath("~/RealUpload/User001/");
                //當(dāng)前文件路徑
                string existingFilePath = Server.MapPath(imgVm.ImageUrl);
                //當(dāng)前文件名,根據(jù)文件路徑獲得
                string existingFileName = Path.GetFileName(existingFilePath);
                if (CreateFolderIfNeeded(pathForRealSaving))
                {
                    if (CreateFolderIfNeeded(pathForRealUserSaving))
                    {
                        //根據(jù)當(dāng)前文件路徑獲取當(dāng)前文件
                        var existingfile = Path.GetFullPath(existingFilePath);
                        //獲取目標(biāo)文件夾內(nèi)的目標(biāo)文件
                        var realfile = Path.Combine(pathForRealUserSaving, existingFileName);
                        //把臨時文件內(nèi)的圖片復(fù)制到目標(biāo)文件夾內(nèi)
                        System.IO.File.Copy(existingfile, realfile, true);
                        
                        //保存新的圖片相對路徑
                        imgVm.ImageUrl = "RealUpload/User001/" + existingFileName;
                    }
                }
              
                return View("showimg", imgVm);
            }
            else
            {
                return Index(imgVm);
            }
        }

Home/Index.cshtml中多了在上傳圖片成功后給id為ImageUrl隱藏域賦值的部分。

@model MvcApplication10.Models.ImgVm
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
    #msg {
        color: red;
    }
</style>
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id = "addForm", @class = "form-horizontal"}))
{
    <input name="file" id="file" size="27" type="file" />
    <img src="~/images/ajax-loader.gif" id="indicator" style="display: none;" />
    <br />
    <div id="imgArea">
        <table id="tbl">
            <tbody>         
            </tbody>
        </table>
    </div>
    <div>
        <span id="msg"></span>
    </div>  
    
    <div>
        @Html.HiddenFor(m => m.ImageUrl)
        <input type="submit" value="提交"/>
    </div>
}
 
@section scripts
{
    <script src="~/Scripts/checkFileTypeAndSize.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#file").checkFileTypeAndSize({
                allowedExtensions: ['jpg','jpeg','gif','png'],
                maxSize: 1024, //最大允許1024KB,即1MB
                success: function () {
                    //顯示進度提示
                    $('#indicator').css("display", "block");
                    //清空提示內(nèi)容
                    $('#msg').text('');
                    if ($('#fn').text().length > 0) {
                        //刪除圖片
                        deleteImg();
                    }
                    
                    //上傳文件數(shù)據(jù)準(zhǔn)備
                    var fd = new FormData();
                    fd.append('image', $('#file')[0].files[0]);
                    $.ajax({
                        url: '@Url.Action("UploadFile", "Home")',
                        type: "POST",
                        data: fd,
                        contentType: false,
                        cache: false,
                        processData: false,
                        dataType: 'json',
                        success: function (data) {
                            //隱藏進度提示
                            $('#indicator').css("display", "none");
                            if (data.isvalid) {
                                //$('#fileTemplate').tmpl(data).appendTo('#imgArea');
                                createTableTr();
                                $('#thumb').attr('src', data.filepath);
                                $('#fn').text(data.filename);
                                //清空上傳文件框內(nèi)容
                                $('#file').val('');
                                //給隱藏域賦值
                                $('#ImageUrl').val(data.filepath);
                            } else {
                                $('#msg').text(data.message);
                             }
                        }
                     });
                    
                },
                extensionerror: function () {
                    //alert('允許的格式為:jpg,jpeg,gif,png');
                    $('#msg').text('允許的格式為:jpg,jpeg,gif,png');
                    return;
                },
                sizeerror: function () {
                    //alert('最大尺寸1024KB,即1MB');
                    $('#msg').text('最大尺寸1024KB,即1MB');
                    return;
                }
            });
        });
        //刪除圖片
        function deleteImg() {
            $.ajax({
                cache: false,
                url: '@Url.Action("DeleteFileByName", "Home")',
                type: "POST",
                data: { smallname: $('#fn').text() },
                success: function (data) {
                    if (data.msg) {
                        $('#fn').parent().parent().remove();
                    }
                },
                error: function (jqXhr, textStatus, errorThrown) {
                    alert("出錯了 '" + jqXhr.status + "' (狀態(tài): '" + textStatus + "', 錯誤為: '" + errorThrown + "')");
                }
            });
        }
        //創(chuàng)建表格
        function createTableTr() {
            var table = $('#tbl');
            table.append("<tr><td><img id='thumb' /></td><td colspan='2'><span id='fn'></span></td></tr>");
        }
    </script>
}

還有一個Home/showimg.cshtml視圖,用來顯示新的(相對臨時文件夾中的那張圖片)圖片。

@model MvcApplication10.Models.ImgVm
@{
    ViewBag.Title = "showimg";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>showimg</h2>
<img src="@Model.ImageUrl"/>

當(dāng)然,存放上傳圖片的臨時文件夾是可以隨時清理的。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 關(guān)于Swagger優(yōu)化的實戰(zhàn)記錄

    關(guān)于Swagger優(yōu)化的實戰(zhàn)記錄

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化?RESTful風(fēng)格的Web服務(wù),下面這篇文章主要給大家介紹了關(guān)于Swagger優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 詳解.NET Core 3.0 里新的JSON API

    詳解.NET Core 3.0 里新的JSON API

    這篇文章主要介紹了詳解.NET Core 3.0 里新的JSON API,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • asp.net中rdlc 合并行的方法

    asp.net中rdlc 合并行的方法

    要合并內(nèi)容行,我想是不可能的,我上網(wǎng)找了N久,也沒找到,囧
    2011-10-10
  • .net5?使用Hangfire的過程記錄

    .net5?使用Hangfire的過程記錄

    最近項目遇到這樣的需求,需要實現(xiàn)根據(jù)領(lǐng)取時間改變優(yōu)惠券狀態(tài)的功能,本文給大家分享.net5?使用Hangfire的過程記錄,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • asp.net DataSet進行排序

    asp.net DataSet進行排序

    關(guān)于對已經(jīng)綁定的DataSet的排序的問題。
    2009-07-07
  • ASP.NET中GridView、DataList、DataGrid三個數(shù)據(jù)控件foreach遍歷用法示例

    ASP.NET中GridView、DataList、DataGrid三個數(shù)據(jù)控件foreach遍歷用法示例

    這篇文章主要介紹了ASP.NET中GridView、DataList、DataGrid三個數(shù)據(jù)控件foreach遍歷用法,結(jié)合實例形式分析了GridView、DataList、DataGrid使用foreach及for語句進行數(shù)據(jù)遍歷的具體使用方法,需要的朋友可以參考下
    2016-08-08
  • ASP.NET Core 使用Cookie驗證身份的示例代碼

    ASP.NET Core 使用Cookie驗證身份的示例代碼

    這篇文章主要介紹了ASP.NET Core 使用Cookie驗證身份的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • ASP.NET使用AjaxPro實現(xiàn)前端跟后臺交互詳解

    ASP.NET使用AjaxPro實現(xiàn)前端跟后臺交互詳解

    這篇文章主要為大家詳細(xì)介紹了ASP.NET使用AjaxPro實現(xiàn)前端跟后臺交互,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • asp.net 頁面?zhèn)髦档膸讉€方法

    asp.net 頁面?zhèn)髦档膸讉€方法

    在網(wǎng)頁應(yīng)用程序的開發(fā)中,頁面之間的傳值應(yīng)該是最常見的問題了。
    2009-11-11
  • 厚積薄發(fā),擁抱.NET 2016

    厚積薄發(fā),擁抱.NET 2016

    一想到.NET 2016,腦海里蹦出的第一個詞就是厚積薄發(fā)。 .NET 2016 是 .NET 一次質(zhì)的飛躍,不管難易,我們需要擁抱變化
    2016-06-06

最新評論