【ASP.NET】原生JavaScript加Asp.net实现多图片上传

news2024/9/29 19:26:11

记录一下,Javascript加asp.net实现多文件上传的方法。首先看一下要实现的功能,图片比文字描述更直观。
请添加图片描述

一、前台代码

前台代码代码分为三个部分,一是HTML代码,二是Style样式代码,三是Javascript代码。

1.html代码

在html中加入file控件,multiple设置为multiple,该控件主要是实现图片文件多选,并返回所选数据。
添加2个DIV标签,一个ID设置为“progressBar”,用来显示上传进度。该标签包含两个子DIV标签,一个图形显示进度,一个文字显示进度。另一个ID设置为“picBox”,用来显示上传完成后的图片。具体代码如下:

 <div>
            <input id="File1" type="file" multiple="multiple" onchange="UpLoad(this)"/><br />     
            <div id="progressBar">
                <div id="progressBarImg"></div>
                <div id="progressBarTxt">0%</div>
            </div>
            <div id="picBox"></div>
        </div>

2.Style样式代码

progressBar定义进度条样式;progressBarImg 定义图片进度显示样式;
progressBarTxt 定义文字进度显示样式;delbt定义删除按钮样式。

    <style>
        #progressBar{width:200px;border:1px solid #000000;height:30px;position:relative;}
        #progressBarImg {
            width:0%;background-color:#00ff21;height:30px;position:absolute;z-index:3;
        }
        #progressBarTxt {
            height:30px;position:absolute;z-index:4;text-align:center;
        }
        .delbt{position:absolute;border-radius:50%;width:25px;height:25px;background:#ff6a00;color:#ffffff;text-align:center;line-height:25px;cursor:pointer;}
        #picBox li{position:relative;list-style:none;padding:3px;margin:0px;height:100px;width:100px;display:block;float:left;}
        #picBox li img{position:absolute;height:100px;width:100px}
    </style>

3.Javascript代码

领域XMLHttpRequest向后台提交数据,后台实现图片文件保存删除功能,代码中标有详细解释,具体代码如下:

 <script type="text/javascript">
            var xhr;
            var progressBarTxt = document.getElementById("progressBarTxt");
            var progressBarImg = document.getElementById("progressBarImg");
            var picBox = document.getElementById("picBox");
            function UpLoad(obj) {
                progressBarTxt.innerHTML =  "0%";
                progressBarImg.style.width = "0%"
                var formData = new FormData(); // FormData 对象
                for (var i = 0; i < obj.files.length; i++) {
                    formData.append("files[]", obj.files[i]);
                }
                xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
                xhr.onreadystatechange = function () {//设置回调函数,请求状态readyState=4准备就绪,服务器返回的状态码status=200接收成功
                    // if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText) }
                }
                xhr.open("POST", "ImgUp.aspx", true);//post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                xhr.upload.addEventListener("progress", function (e) {//监听上传进度
                    //if (e.lengthComputable) {
                    //    console.log("percent: ", (e.loaded / e.total) * 100 + "%");
                    //}
                }, false);
                xhr.onload = uploadComplete; //请求完成
                xhr.onerror = uploadFailed; //请求失败
                xhr.upload.onprogress = progressFunction;//上传进度调用方法实现
                xhr.upload.onloadstart = function () {//上传开始执行方法
                    startTime = new Date().getTime();   //设置上传开始时间
                    startSize = 0;//设置上传开始时,以上传的文件大小为0
                };
                xhr.send(formData);

            }
            function progressFunction(evt) {
                progressBarTxt.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";                
                progressBarImg.style.width = Math.round(evt.loaded / evt.total * 100) + "%"
            }
            function uploadComplete(evt) {
                var temstr = xhr.responseText.split(',');
                for (var i = 0; i < temstr.length; i++) {
                    var li = document.createElement("li");
                    li.innerHTML = "<img src='" + temstr[i] + "'/><span class='delbt' οnclick='deletePic(this,\"" + temstr[i] +"\")'>X</span>";
                    picBox.appendChild(li);
                }
                
            }
            function uploadFailed(evt) { alert("上传失败!"); }
            function deletePic(obj,picurl) {
                var xhrD = new XMLHttpRequest();
                xhrD.open("get", "ImgDelete.aspx?f=" + picurl, true);
                xhrD.onload = function () {
                    obj.parentElement.remove();
                }
                xhrD.onerror = function () { }
                xhrD.send();
            }
        </script>

4.整个前台代码

整个aspx文件代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style>
        #progressBar{width:200px;border:1px solid #000000;height:30px;position:relative;}
        #progressBarImg {
            width:0%;background-color:#00ff21;height:30px;position:absolute;z-index:3;
        }
        #progressBarTxt {
            height:30px;position:absolute;z-index:4;text-align:center;
        }
        .delbt{position:absolute;border-radius:50%;width:25px;height:25px;background:#ff6a00;color:#ffffff;text-align:center;line-height:25px;cursor:pointer;}
        #picBox li{position:relative;list-style:none;padding:3px;margin:0px;height:100px;width:100px;display:block;float:left;}
        #picBox li img{position:absolute;height:100px;width:100px}
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <input id="File1" type="file" multiple="multiple" onchange="UpLoad(this)"/><br />     
            <div id="progressBar">
                <div id="progressBarImg"></div>
                <div id="progressBarTxt">0%</div>
            </div>
            <div id="picBox"></div>
        </div>
        <script type="text/javascript">
            var xhr;
            var progressBarTxt = document.getElementById("progressBarTxt");
            var progressBarImg = document.getElementById("progressBarImg");
            var picBox = document.getElementById("picBox");
            function UpLoad(obj) {
                progressBarTxt.innerHTML =  "0%";
                progressBarImg.style.width = "0%"
                var formData = new FormData(); // FormData 对象
                for (var i = 0; i < obj.files.length; i++) {
                    formData.append("files[]", obj.files[i]);
                }
                xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
                xhr.onreadystatechange = function () {//设置回调函数,请求状态readyState=4准备就绪,服务器返回的状态码status=200接收成功
                    // if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText) }
                }
                xhr.open("POST", "ImgUp.aspx", true);//post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                xhr.upload.addEventListener("progress", function (e) {//监听上传进度
                    //if (e.lengthComputable) {
                    //    console.log("percent: ", (e.loaded / e.total) * 100 + "%");
                    //}
                }, false);
                xhr.onload = uploadComplete; //请求完成
                xhr.onerror = uploadFailed; //请求失败
                xhr.upload.onprogress = progressFunction;//上传进度调用方法实现
                xhr.upload.onloadstart = function () {//上传开始执行方法
                    startTime = new Date().getTime();   //设置上传开始时间
                    startSize = 0;//设置上传开始时,以上传的文件大小为0
                };
                xhr.send(formData);

            }
            function progressFunction(evt) {
                progressBarTxt.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";                
                progressBarImg.style.width = Math.round(evt.loaded / evt.total * 100) + "%"
            }
            function uploadComplete(evt) {
                var temstr = xhr.responseText.split(',');
                for (var i = 0; i < temstr.length; i++) {
                    var li = document.createElement("li");
                    li.innerHTML = "<img src='" + temstr[i] + "'/><span class='delbt' οnclick='deletePic(this,\"" + temstr[i] +"\")'>X</span>";
                    picBox.appendChild(li);
                }
                
            }
            function uploadFailed(evt) { alert("上传失败!"); }
            function deletePic(obj,picurl) {
                var xhrD = new XMLHttpRequest();
                xhrD.open("get", "ImgDelete.aspx?f=" + picurl, true);
                xhrD.onload = function () {
                    obj.parentElement.remove();
                }
                xhrD.onerror = function () { }
                xhrD.send();
            }
        </script>
    </form>
</body>
</html>

二、后台代码

后台包含两个页面一个是上传页面,一个是删除页面。

1.上传页面

上传页面名称为“ImgUp.aspx”,前台页面删除所有html代码,只保留一行如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ImgUp.aspx.cs" Inherits="PicUpload.ImgUp" %>

后台主要代码如下:

 protected void Page_Load(object sender, EventArgs e)
        {
            string savePath = Server.MapPath(".");
            int piccount = HttpContext.Current.Request.Files.Count;
            ArrayList result = new ArrayList();
            if (piccount == 0)
            {
                Response.Write("1");
                Response.End();
            }
            for (int i = 0; i < piccount; i++)
            {
                HttpPostedFile file = HttpContext.Current.Request.Files[i];
                string filename = DateTime.Now.ToString("yyyyMMddmmssfff") + i.ToString() + System.IO.Path.GetExtension(file.FileName);
                file.SaveAs(savePath + "\\" + filename);
                result.Add(filename);
            }
            string rs = string.Join(",", (string[])result.ToArray(typeof(string)));
            Response.Write(rs);
        }

2.删除页面

上传页面名称为“ImgDelete.aspx”,前台页面删除所有html代码,只保留一行如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ImgDelete.aspx.cs" Inherits="PicUpload.ImgDelete" %>

后台主要代码如下:

 protected void Page_Load(object sender, EventArgs e)
        {
            string filename = HttpContext.Current.Request["f"];
            string FileUrl = Server.MapPath(filename);
            if (File.Exists(FileUrl))
            {
                File.Delete(FileUrl);
            }
        }

三、代码

以上步骤我们图片上传的基本框架已实现,需要的朋友可以进行完善。代码下载请单击。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亿级高并发电商项目-- 实战篇 --万达商城项目 八(安装FastDFS、安装Nginx、文件服务模块、文件上传功能、商品功能与秒杀商品等功能)

专栏&#xff1a;高并发---分布式项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支…

C语言进阶——自定义类型:枚举、联合

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;如果不去遍历世界&#xff0c;我们就不知道什么是我们精神和情感的寄托&#xff0c;但我们一旦遍历了世界&#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求&#xff0c;我们就已…

2023春招java面试题及答案

2023春招java面试题及答案总结1.以下Dubbo服务负载均衡策略中&#xff0c;哪一个策略的功能是相同参数的请求总是发到同一个提供者&#xff08;&#xff09;2.如下代码&#xff1a;请问编译运行的结果是什么&#xff1f;3.给出如下代码&#xff1a;请问编译运行的结果是什么&am…

英国访问学者邀请函范例

下面是知识人网访问学者老师分享的一个英国访问学者邀请函范例&#xff0c;邀请函不要复杂&#xff0c;提供签证官想看到的东西即可。Chen xxxDate of Birth: September 1th , 19xxSchool of Computer and InformationXXXX UniversityNo.X South RoadXXX city, XXX Province, 1…

1.Unity之Shader新手入门

Unity Shader着色器的基本概念如何使用Unity Shader着色器示例&#xff1a;如何使用Unity Shader着色器创建复杂的效果总结 什么是Unity中的Shader着色器&#xff1f; Shader着色器是用来控制物体外观的编程代码&#xff0c;它可以改变物体的颜色、纹理、光照、凹凸等&#xf…

智慧校园综合解决方案

在网络和信息技术的普及和国家教育信息化建设的推动下&#xff0c;以计算机网络为基础&#xff0c;以信息和知识资源的共享为手段&#xff0c;强调合作、分享、传承精神的网络化、数字化、智能化有机结合的新型教育、学习和研究的教育环境建设显得尤为重要。 智慧校园是利用信息…

leaflet 纯CSS的marker标记,不用图片来表示(072)

第072个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用纯CSS来打造marker的标记。这里用到的是L.divIcon来引用CSS来构造新icon,然后在marker的属性中引用。 这里必须要注意的是css需要是全局性质的,不能被scoped转义为其他随机的css。 直接复制下面的 v…

【SPSS】频数分析和基本描述统计量详细操作教程(附实战案例)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

记录--『uni-app、小程序』蓝牙连接、读写数据全过程

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本文简介 这是一次真实的 蓝牙收发数据 的全过程讲解。 本文使用 uni-app Vue3 的方式进行开发&#xff0c;以手机app的方式运行(微信小程序同样可行)。 uni-app 提供了 蓝牙 和 低功耗蓝牙 的 api &…

深圳硬件黑客松活动,开放报名!

开源社KAIYUANSHE近期微信公众号订阅功能做调整啦&#xff01;没有被星标的账号在信息流里可能不显示大图了&#xff01;快星标⭐我们&#xff0c;就可以及时看到发布的文章啦&#xff01;STEP01 点击右上角标志STEP02 点击【设为星标】近年来&#xff0c;创客文化越来越受到人…

figma通过什么方式可以转换为sketch

Figma 如何转为 Sketch 文件&#xff1f;巧了&#xff0c;刚好我对这个问题很熟悉&#xff0c;作为一个使用过 Figma 也使用过 Sketch 的人来说&#xff0c;我还蛮希望两个软件能够互相打通的&#xff0c;不过不管是 Figma 也好还是 Sketch 也好&#xff0c;两个设计软件&#…

含泪吐槽学C++的血与泪

含泪吐槽学C的血与泪 C在各位程序猿眼里并不陌生&#xff0c;但凡学习过C的人&#xff0c;都极有可能被它曾经蹂躏得不要不要的&#xff0c;而我就是其中一个。 文章目录1 我和C的那段血泪史2 再次与C重逢3 我想和你再来一次4 柳暗花明友情推荐5 福利赠书活动6 一个彩蛋大家好&…

FLUXNET数据下载具体步骤

一、FLUXNET数据介绍 全球长期通量观测网络概念最早起源于1993年&#xff0c;由国际地圈-生物圈计划首次提出&#xff0c;国际科学委员会在1995年的La Thuile研讨会上对此概念进行正式讨论&#xff0c;在这次会议上&#xff0c;通量观测委员会讨论了进行长期通量观测的可能性以…

KubeSphere

文章目录一、概述二、最小化安装 KubeSphere2.1 前提2.2 安装 nfs 服务器一、概述 KubeSphere是在Kubernetes之上构建的以应用为中心的企业级分布式容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使用容器调度平台学习成本的同时&#…

超详细,Java 设计模式汇总(三)

装饰者模式 装饰者模式一般指装饰模式。 装饰模式指的是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象。 装饰者模式&#xff08;Decorator Pattern&#xff09;允许向一个现…

springboot+vue简单对接支付宝完整流程

源码 前端 vue-demo https://www.aliyundrive.com/s/dmnY8G6N6RM 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 后端 aliPay https://www.aliyundrive.com/s/H2JFBjGWuf2 …

JVM04 堆

一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。 一个JVM实例&#xff08;一个Runtime&#xff09;只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建&#xff0c;其空间大小也就确定了。是JVM管理的最大…

ios上架及证书最新申请流程

ios上架及证书最新申请流程在使用hbuilderx或apicloud等uniapp框架开发app的时候&#xff0c;需要安卓证书或ios证书&#xff0c;假如是开发ios应用&#xff0c;打包成ipa包后&#xff0c;还需要将这个ipa上架到app store。苹果官网推荐的方法中&#xff0c;生成ios证书和上架i…

字节跳动青训营--前端day9

文章目录前言PC web端一、 前端Debug的特点二、 前端Debug的方式1. 浏览器动态修改元素和样式2. Console3. Sorce Tab4. NetWork5. Application6. Performancee7. Lighthouse移动端调试IOSAndroid通过代理工具调试前言 仅以此文章记录学习。 PC web端 一、 前端Debug的特点 …

Redis学习【6】之BitMap、HyperLogLog、Geospatial操作命令 (1)

文章目录前言BitMap 操作命令1.1 BitMap 简介1.2 setbit1.3 getbit1.4 bitcount1.5 bitpos[pos:position]1.6 bitop1.7 应用场景二 HyperLogLog 操作命令2.1 HyperLogLog 简介2.2 pfadd2.3 pfcount2.4 pfmerge2.5 应用场景三 Geospatial【地理空间】操作命令3. 1 Geospatial 简…