C# MVC 多图片上传预览

一.效果图:

在这里插入图片描述
开发框架:MVC,Layui
列表主界面这里就不展示了,可以去看看这篇文章:Layui项目实战,这里讲的是“上传Banner”界面功能:
其中包括,多文件上传,预览,后台接收,保存,仅此而已

二.项目代码:

1.前端Html代码

head头部代码块:
注意:这里引用的是Layui和jQuery插件,不过重点功能还是在jQuery,Layui只是起到样式效果

<head><meta name="viewport" content="width=device-width" /><title>PushCircleBanner</title><link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /><script src="~/Scripts/jquery-3.3.1.js"></script><script src="~/Scripts/layui/layui.js"></script><style>* {margin: 0;padding: 0;}.box {width: 80%;height: 80vh;margin: auto;}.box p {height: 30px;margin: 10px;}#file{display:none;}.ImgsBox img{width:100px;height:100px;}.select,input{width:200px;}</style>
</head>

body代码块:
注意:这里既然是文件上传,重点自然是input[“file”],multiple=“multiple"多文件上传,accept=”.png,.jpg,.jpeg,.bmp,.gif,.jfif,.ico "限制允许选择的文件类型

<div class="box"><p>性别:</p><p class="layui-input-inline"><select name="sex" class="sex layui-input select"><option value="0" selected>全部</option><option value="1">男</option><option value="2">女</option></select></p><p>是否去重:</p><p class="layui-input-inline"><select name="isDistinct" class="isDistinct layui-input select"><option value="0" selected>否</option><option value="1">是</option></select></p><p>图片上传:</p><p><input type="button" class="layui-btn" name="name" onclick="$('#file').click()" value="上传" /><input id="file" type="file" multiple="multiple" name="img" value="上传" accept=".png,.jpg,.jpeg,.bmp,.gif,.jfif,.ico " onchange="PushFiles()" /></p><p><input type="button" class="layui-btn submit" onclick="Save()" value="保存" /></p><div class="ImgsBox"></div></div>

Js代码块:

注意:PushFiles方法,由点击显示的上传按钮,再触发隐藏的input[“file”]按钮的点击方法,改变files值后触发该方法,实现多文件上传效果,也是这里前端界面展示的重点

<script>var files;function PushFiles() {$('.ImgsBox').html('');files = document.getElementById('file').files;if (files && files.length > 0) {for (var i = 0; i < files.length; i++) {var file = files[i];var URL = window.URL || window.webkitURL;var imgURL = URL.createObjectURL(file);console.log(imgURL);var img = $('<img src="" />');img.attr('src', imgURL);$('.ImgsBox').append(img);}}}

注意:Save方法,由点击保存按钮触发,js的FormData对象进行表单参数收集,ajax再通过文件传输的方式,提交到后台

        function Save() {if (files && files.length > 0) {var formData = new FormData();formData.append('sex', $('.sex').val());formData.append('isDistinct', $('.isDistinct').val());for (var i = 0; i < files.length; i++) {formData.append('img_'+i,files[i] );}$.ajax({url: '/Circle/PushBanner',data: formData,type: 'POST',cache: false,//这个参数是jquery特有的,不进行序列化,因为我们不是json格式的字符串,而是要传文件processData: false, //注意这里一定要设置contentType:false,不然会默认为传的是字符串,这样文件就传不过去了contentType: false,//dataType: "json",success: function (res) {if (res.code == 0) {var index = parent.layer.getFrameIndex(window.name);//先得到当前iframe层的索引   parent.layer.close(index);//再执行关闭} else {alert(res.msg);}}})} else {alert("请选择上传文件!");}}</script>

2.后台C#代码

注意:下面的后台代码块,只要把间隔的注意提示去掉,就能拼接出完整的后台代码

	/// <summary>/// 图片批量上传/// </summary>/// <returns></returns>public ActionResult PushBanner(){

后台登录校验

        if (!(Session["account"] is AccountModel account))return Json(new { code = -1, msg = "登录异常" }, JsonRequestBehavior.AllowGet);

获取前端传输参数:

        StringBuilder msg = new StringBuilder();int error = 0;AliyunOssProvider aliyunOss = new AliyunOssProvider();string suffix = string.Empty;var files = Request.Files;	//ajax传输文件var sex = Request.Form["sex"] == null ? 0 : int.Parse(Request.Form["sex"]);var isDistinct = Request.Form["isDistinct"] == null ? 0 : int.Parse(Request.Form["isDistinct"]);

多文件循环保存:

        for (int i = 0; i < files.Count; i++){var type = files[i].ContentType;if (type.Contains("image")){switch (type){case "image/jpeg":suffix = ".jpg";break;case "image/png":suffix = ".png";break;case "image/bmp":suffix = ".bmp";break;case "image/gif":suffix = ".gif";break;case "image/pipeg":suffix = ".jfif";break;case "image/x-icon":suffix = ".ico";break;default:error++;var obj = new {code = -1,msg = "检测到非指定文件格式(jpg/png/bmp/gif/ico/jfif)"};msg.AppendLine(JsonHelper.SerializeObject(obj));continue;//return Json(new { result = false, messge = "请将图片转化为(jpg/png/bmp/gif/ico/jfif)格式然后上传!" });}if (string.IsNullOrWhiteSpace(suffix)){error++;var obj = new{code = -1,msg = "检测到非指定文件格式(jpg/png/bmp/gif/ico/jfif)"};msg.AppendLine(JsonHelper.SerializeObject(obj));continue;}var file = "banner/";var fileName = DateTime.Now.ToStampDateTime() + "_"+i + suffix;

阿里云图床文件存储,底层不予展示:

                try{var absoluteUri = aliyunOss.UploadObject(files[i].InputStream, file + fileName);}catch (Exception e){error++;var obj = new { code = -2, message = "文件上传失败" };msg.AppendLine(JsonHelper.SerializeObject(obj));//return Json(new { result = false, message = "上传失败" });}

Banner信息存数据库:(底层是数据库保存语句)

                var res = new CircleBll().AddCircleBanners(new Model.CircleBanner() {ImgUrl = AppConfig.AliyunUrl + file + fileName,Sex = sex.ToString(),IsDistinct = isDistinct.ToString(),OperatorId = account.UserId.ToString()});if (!res){error++;var obj = new { code = -3, message = "圈子Banner数据库存储失败" };}}}return error == 0 ? Json(new { code = 0, msg = "",data = true }): Json(new { code = error * -1,msg = msg.ToString(),data = false });}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13864.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习|了解数据处理

数据处理是将数据从给定形式转换为更有用和更期望的形式的任务&#xff0c;即使其更有意义和信息。使用机器学习算法&#xff0c;数学建模和统计知识&#xff0c;整个过程可以自动化。这个完整过程的输出可以是任何所需的形式&#xff0c;如图形&#xff0c;视频&#xff0c;图…

【标准】国家标准GB7713-87(科学论文编写格式)

目 录 1 引言 2 定义 2.1 科学技术报告 2.2 学位论文 2.3 学术论文 3 编写要求 4 编写格式 5 前置部分 5.1 封面 5.2 封二 5.3 题名页 5.4 变异本 5.5 题名 5.6 序或前言 5.7 摘要 5.8 关键词 5.9 目次页 6 主体部分 6.1 格式 6.2 序号 6.3 引言(或绪论)…

Linux--Linux的应用市场:yum

先问大家一个问题&#xff1a; 你下载的软件&#xff0c;是从手机上下载的吗&#xff1f; 当然不是了&#xff0c;我手机上要是有这个软件&#xff0c;直接就可以打开使用了&#xff0c;我还下它干嘛。 那既然不是从手机下载的&#xff0c;那是从哪儿下的&#xff1f; 应用…

Rainbond开源

Rainbond的 Gateway API 插件制作实践 Gateway API 作为新一代的流量管理标准&#xff0c;对原有 Ingress 的扩展不规范、移植性差等问题做出了改进。从兼容K8s生态和优化网关体验出发&#xff0c;Rainbond 支持以插件的形式扩展平台网关能力&#xff0c;目前已经有多家社区提供…

Zookeeper

一、概念 它是一个分布式服务框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 zookeeper文件系统监听通知机…

SpringBoot教学资料5-SpringBoot一对多查询(带简单前端)

项目展示&#xff1a; 项目结构&#xff1a; SQL&#xff1a; CREATE TABLE t_article (id int(20) NOT NULL AUTO_INCREMENT COMMENT 文章id,title varchar(200) DEFAULT NULL COMMENT 文章标题,content longtext COMMENT 文章内容,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCR…

抖音seo源码保姆式服务搭建|定制产品开发分享

抖音seo霸屏&#xff0c;是一种专为抖音视频创作者和传播者打造的视频批量剪辑&#xff0c;批量分发产品。使用抖音seo霸屏软件&#xff0c;可以帮助用户快速高效的制作出高质量的优质视频。 使用方法&#xff1a;1. 了解用户的行为习惯 2. 充分利用自身资源进行开发 3. 不…

OpenCV对图片进行缩放处理

在下面的代码中,我会为你优化和解释这段程序: #include <opencv2/opencv.hpp>using namespace cv;int main() {// 读取源图片Mat srcImage = imread("../51_resize.jpg"

电脑提示找不到应用程序怎么办?

无论个人电脑还是办公电脑&#xff0c;无一例外的都会安装一些应用程序来帮助我们使用。而在电脑的使用过程中总会出现一些大大小小的问题&#xff0c;其中双击桌面快捷方式显示找不到应用程序是一个比较常见的故障。那么&#xff0c;电脑找不到应用程序怎么解决呢? 电脑找不到…

路由的介绍

目录 路由器的转发原理&#xff1a;路由表 路由——指示路由器去往未知网段的方法 路由器的转发原理&#xff1a;路由表 当一个数据包来到路由器&#xff0c;路由器将基于数据包中的目标IP地址查询自身的路由表&#xff0c;如果路由表中有相应的记录&#xff0c;则无条件根据…

【终端增强工具】这次,我把Terminal(终端)也接入ChatGPT了...

大家好&#xff0c;我是萌新程序员豆小匠。 为terminal&#xff08;终端&#xff09;增加自定义命令这个想法从开始学编程的时候就有了&#xff0c;但是一直没有付诸行动。 这次&#xff0c;终于抽时间完成了&#xff0c;且代码开源&#xff01; 实现的功能 先说下实现的功能…

抖音矩阵系统源码开源部署分享(三)

目录 一、 概述&#xff1a; 二、 账号矩阵搭建目的&#xff1a; 三、 抖音矩阵系统源码开发步骤 四、 功能规划 五、 代码开发展示 一、 概述&#xff1a; 抖音矩阵系统是指通过多个账号运营&#xff0c;对账号之间的内容和特征进行细分&#xff0c;账号之间相互引流推广&a…