色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:7日期:2022-06-08 10:46:24

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

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

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

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

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

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

  • 提供一個(gè)顯示上傳頁面的Action,并且是ImgVm類型的強(qiáng)類型視圖,ImgVm的ImageUrl屬性用來存放上傳圖片的相對(duì)路徑
  • 提供一個(gè)接收ImgVm類型的Action,把臨時(shí)文件夾內(nèi)的圖片復(fù)制到目標(biāo)文件夾內(nèi),并且給ImgVm的ImageUrl屬性賦上新的圖片相對(duì)路徑
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);
//把臨時(shí)文件內(nèi)的圖片復(fù)制到目標(biāo)文件夾內(nèi)
System.IO.File.Copy(existingfile, realfile, true);

//保存新的圖片相對(duì)路徑
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" />
    <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 () {
    //顯示進(jìn)度提示
    $("#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) {
    //隱藏進(jìn)度提示
    $("#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("出錯(cuò)了 "" + jqXhr.status + "" (狀態(tài): "" + textStatus + "", 錯(cuò)誤為: "" + 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>
}

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

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

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

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

標(biāo)簽: ASP.NET
相關(guān)文章:
主站蜘蛛池模板: 日韩精品三级 | 久久精品一区二区国产 | 分享一个无毒不卡免费国产 | 日韩一级欧美一级在线观看 | 视频在线一区二区 | 日韩免费a级在线观看 | 亚洲欧美偷拍自拍 | 欧美成人aaaa免费高清 | 亚洲天堂男人天堂 | 国产美女白丝袜精品_a不卡 | 欧美三级一区二区三区 | 成人午夜影院在线观看 | 亚洲精品色 | 久久极品 | 欧美成人观看免费版 | 久久思 | 久久综合本色宗合一本色 | 国产一级毛片卡 | 久久99毛片免费观看不卡 | 久久这| 欧美日韩免费播放一区二区 | 久青草免费视频 | 在线日本看片免费人成视久网 | 国产呦系列 | 久久黄色网址 | 美女黄色一级毛片 | 在线观看视频中文字幕 | 欧美性猛交xxxxxxxx软件 | www.一区二区三区.com | 久久er国产精品免费观看1 | 欧美成人性色大片在线观看 | 成人午夜看片在线观看 | 国内高清自拍 | 国内精品久久久久影院亚洲 | 国产美女视频黄a视频全免费网站 | 日韩三级在线观看视频 | 九九精品成人免费国产片 | 久久亚洲一级毛片 | 国内国产真实露脸对白 | 日韩欧美在线视频观看 | 欧美一级片在线看 |