C# 文件上传

2023-11-15

获取POST 请求发送的文件 并保存到服务器

 HttpPostedFile file = System.Web.HttpContext.Current.Request.Files["file"];
            //获取上载文件名称
            string _FileName = file.FileName;
            //后缀
            string _Ext = _FileName.Substring(_FileName.LastIndexOf("."));
            //新文件名
            string _NewName = "class-" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
            //获取上传路径
            string _ImgPath = System.Configuration.ConfigurationManager.AppSettings["Field_img"].ToString();
             //存储文件的路径及文件
            string _Path = Server.MapPath(_ImgPath) + _NewName + _Ext;
            //存文件到服务器磁盘
            file.SaveAs(_Path);

批量上传图片 后端+js前端

这里的前端样式可以去我的资源那里下载

后端代码

try
            {
                //获取url中的参数
                var PId = Request.QueryString["PId"];
                //截取字节流数据
                HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
                if (files.Count > 0)
                {
                    for (var i = 0; i < files.Count; i++)
                    {
                        //获取字节流数据
                        var file = Request.Files["myFile[" + i + "]"];
                        //重命名文件
                        var fileName = file.FileName;
                        //获取文件后缀名
                        var fileExt = Path.GetExtension(fileName);
                        //获取年月日时分秒
                        var date = DateTime.Now.ToString("yyyyMMddHHmmss");
                        //生成三位数的随机数
                        var random = new Random();
                        var randomNum = random.Next(100, 999);
                        //生成新的文件名= 当前Id+年月日时分秒+随机数+后缀名
                        var newFileName = PId + "-" + date + randomNum + fileExt;
                        //将文件保存到服务器上
                        //先判断路径是否存在
                        var day = DateTime.Now.ToString("yyyyMMdd");
                        var path = Server.MapPath("~/Upload/" + day);
                        if (!Directory.Exists(path))
                        {
                            //没有文件路径则创建
                            Directory.CreateDirectory(path);
                        }
                        var filePath = Server.MapPath("~/Upload/" + day + "/");
                        //保存到服务器
                        file.SaveAs(filePath + newFileName);
                        //将文件信息保存到数据库
                        /*这里写保存图片路径到数据库的业务*/
                    }
                    return Json(new { data = 200 });
                }
                else
                {
                    return Success(-1, "请选择需要上传的图片");
                }
            }
            catch (Exception ex)
            {
                return Success(-1, ex.Message);
            }

前端(js语法)

html

<div class="form-group">
                        <label class="control-label col-md-2">上传图片:</label>
                        <div class="col-md-8">
                            <div class="main">
                                <div class="upload-content">
                                    @*<h3>上传图片</h3>*@
                                    <div class="content-img">
                                        <ul class="content-img-list"></ul>
                                        <div class="file">
                                            <i class="gcl gcladd"></i>
                                            <input type="file" name="file" accept="image/*" id="upload" multiple>
                                        </div>
                                    </div>
                                    <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
                                        <div class="modal-dialog modal-lg" role="document">
                                            <div class="modal-content">

                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">

                            <button type="button" class="btn btn-info" id="btn-submit-upload"><span class="glyphicon glyphicon-ok"></span>保存</button>
                        </div>
                    </div>

js

<script>
        var imgFile = []; //文件流
        var imgSrc = []; //图片路径
        var imgName = []; //图片名字
        var imgId = [];//后端返回的图片主键

        let imageList = @Html.Raw(Json.Encode(@ViewBag.Image));
        if (imageList.length > 0) {
            console.info(imageList)

            for (var item = 0; item < imageList.length; item++) {
                imgSrc.push(imageList[item].PictureUrl);
                imgId.push(imageList[item].Id);
                //下面两个字段随便存啥,只有与后端返回的数组长度一致即可,用于占位方便前端的假删除
                imgFile.push(imageList[item].Id);
                imgName.push(imageList[item].Id);
            }
            var imgBox = '.content-img-list';
            addNewContent(imgBox);
            console.log("=====赋值后", imgSrc)
            console.log("=====赋值后图片id", imgId)
        } else {//只有当后台存在数据才显示打印
            var div = document.getElementById("printPic");
            div.setAttribute("style", "display:none");
        }

        $(function () {
            // 鼠标经过显示删除按钮
            $('.content-img-list').on('mouseover', '.content-img-list-item', function () {
                $(this).children('div').removeClass('hide');
            });
            // 鼠标离开隐藏删除按钮
            $('.content-img-list').on('mouseleave', '.content-img-list-item', function () {
                $(this).children('div').addClass('hide');
            });
            // 单个图片删除
            $(".content-img-list").on("click", '.content-img-list-item a .gcllajitong', function () {
                var index = $(this).parent().parent().parent().index();
                console.log("触发删除==》", index)
                if (imgId.length > 0) {//证明存在后端图片
                    console.log("存在需要删除的后端图片")
                    if (imgId[index]) {
                        console.log("执行删除后端")
                        removeImg(imgId[index], index)
                    }
                }
                console.log("执行删除前端")
                imgSrc.splice(index, 1);
                imgFile.splice(index, 1);
                imgName.splice(index, 1);
                var boxId = ".content-img-list";
                addNewContent(boxId);
            });


            $(".content-img-list").on("click", '.content-img-list-item a .gclfangda', function () {
                var index = $(this).parent().parent().parent().index();
                $(".modal-content").html("");

                var bigimg = $(".modal-content").html();
                $(".modal-content").html(bigimg + '<div class="show"><img src="' + imgSrc[index] + '" alt="" style="width:96%;height:100%"><div>');
            });
        });
        //图片上传
        $('#upload').on('change', function (e) {
            var imgSize = this.files[0].size;
            if (imgSize > 1024 * 1024 * 1) { //1024kb*1024K=1M
                return alert("上传图片不能超过1M");
            };
            if (this.files[0].type != 'image/png' && this.files[0].type != 'image/jpeg' && this.files[0].type != 'image/gif') {
                return alert("图片上传格式不正确");
            }

            var imgBox = '.content-img-list';
            var fileList = this.files;
            for (var i = 0; i < fileList.length; i++) {
                var imgSrcI = getObjectURL(fileList[i]);
                imgName.push(fileList[i].name);
                imgSrc.push(imgSrcI);
                imgFile.push(fileList[i]);
            }
            addNewContent(imgBox);
            this.value = null; //上传相同图片
        });

        //提交请求
        $('#btn-submit-upload').on('click', function () {
            // FormData上传图片
            var formFile = new FormData();
            // 遍历图片imgFile添加到formFile里面
            $.each(imgFile, function (i, file) {
                formFile.append('myFile['+i+']', file);
            });
            $.ajax({
                url: '/T_TaskMian/AddFile?Pid='+@ViewBag.PId,
                type: 'POST',
                data: formFile,
                async: true,
                cache: false,
                contentType: false,
                processData: false,
                dataType: 'json',
                success: function (res) {
                    console.log(res);
                    if (res.data == 200) {
                        alert("保存成功")
                        location.reload();
                        //$("#adviceContent").val("");
                        // $("#contact").val("");
                    } else {
                        alert(res.msg);
                        location.reload();
                        //$('.content-img .file').show();
                        //$("#adviceContent").val("");
                        //$("#cotentLength").text("0/240");
                        //$("#contact").val("");
                        //imgSrc = []; imgFile = []; imgName = [];
                        //addNewContent(".content-img-list");
                    }
                }
            })
        });


        //删除后端
        function removeImg(obj, index) {
            $.ajax({
                url: '/T_TaskMian/DeleteFile?Id='+obj,
                type: 'GET',
                async: true,
                cache: false,
                contentType: false,
                processData: false,
                success: function (res) {
                    console.log(res);
                    if (res.data == 200) {
                        alert("成功删除!")
                        location.reload();
                    } else {
                        alert(res.msg);
                        location.reload();
                    }
                }
            });
        }

        //图片展示
        function addNewContent(obj) {
            // console.log(imgSrc)
            $(obj).html("");
            for (var a = 0; a < imgSrc.length; a++) {
                var oldBox = $(obj).html();
                $(obj).html(oldBox + '<li class="content-img-list-item"><img src="' + imgSrc[a] + '" alt="">' +
                    '<div class="hide"><a index="' + a + '" class="delete-btn"><i class="gcl gcllajitong"></i></a>' +
                    '<a index="' + a + '" class="big-btn" type="button" data-toggle="modal" data-target=".bs-example-modal-lg"><i class="gcl gclfangda"></i></a></div></li>');
            }
        }

        //建立可存取到file的url
        function getObjectURL(file) {
            var url = null;
            if (window.createObjectURL != undefined) { // basic
                url = window.createObjectURL(file);
            } else if (window.URL != undefined) { // mozilla(firefox)
                url = window.URL.createObjectURL(file);
            } else if (window.webkitURL != undefined) { // webkit or chrome
                url = window.webkitURL.createObjectURL(file);
            }
            return url;
        }
    </script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 文件上传 的相关文章

  • ASP.NET 5 中的全局异常处理

    如何将自己的日志记录逻辑附加到 ASP NET 5 应用程序以处理业务逻辑和较低层中引发的每个异常 我尝试用自己的ILoggerProvider实施和loggerfactory AddProvider new LoggerProvider
  • 为什么不是所有具有 Text 属性的 System.Web.UI.WebControl 类都实现 ITextControl?

    我很好奇为什么只有一些System Web UI WebControl当控件具有与接口相同的属性时 它们会实现某些接口 例如 有很多控件具有 Text 属性 但只有以下实现ITextControl Label Literal 数据绑定文字
  • 使用“dnupublish”排除发布项目上的文件夹

    如何使用 dnupublish 命令从 wwwroot 中排除文件夹 示例 在我的项目中存在许多文件夹 我需要排除wwwroot lib and wwwroot 源 我正在使用 clr 1 0 0 beta7 12302 The wwwro
  • ASP.NET AJAX 进度条:从代码隐藏更新?

    我在应用程序中具有 Excel 电子表格的导入功能 目前它使用 FileUpload 控件 我上传文件 然后对该文件运行操作 我想通知用户正在完成的操作以及完成的百分比 我认为我可以获取从 Excel 电子表格中提取的总行数 并在将每条记录
  • 共享 Owin Cookie 身份验证和基于旧版表单身份验证 cookie

    在我们公司 我们拥有大量使用 Asp net Web Forms 4 0 构建的应用程序 这些应用程序使用表单身份验证作为单点登录身份验证 配置如下
  • 将标签文本设置为 gridview 的总行数

    我使用 sql 数据库中的存储过程作为 aspx 页面上 SqlDataSourceControl 的数据源 然后 我使用 SqlDataSourceControl 作为页面上 gridview 的数据源 gridview 上的分页设置为
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • Jquery Ajax 调用返回 403 状态

    我有一个 jquery Ajax 调用来实现会话的 keepalive 这个 keepAlive 方法将每 20 分钟调用一次 function keepAlive ajax type POST url KeepAliveDummy asp
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • .tostring() 保留前导零[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 转换对象
  • 在SQL Server中仅获取浮点数的小数部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 SQL Server 2008
  • MVC3数据缓存技术

    我有一个 sql 查询 存储过程 在结果显示在网络网格中之前需要大约 8 10 秒才能返回 关于 asp net mvc3 中的缓存的性能最佳实践是什么 以便用户不必每次都花费 8 10 秒来加载该数据 减少优化查询 你可以使用内存缓存 h
  • MVC4 - ContextDependentView - 是什么意思?

    我刚刚开始使用 MVC4 我看到的第一个操作方法有一些新内容 我查了一下互联网 找不到任何关于此的信息 public ActionResult LogOn return ContextDependentView 有谁知道 ContextDe
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • ASP.NET MVC2:“System.MissingMethodException:没有为此对象定义无参数构造函数。”

    我目前正在尝试修改默认 MVC 项目的注册组件 以适应我的项目 为此 我修改了 RegisterModel Register aspx 和 AccountController 我可以很好地查看寄存器视图 但是当我提交时 我在标题中收到错误
  • 无法成功启动或连接到 MSBuild.exe 子进程。验证 MSBuild.exe

    我第一次遇到这种情况 运行构建并收到此错误 当我重建其他sln一切正常 错误 1 由于内部故障 构建意外停止 Microsoft Build Exceptions BuildAbortedException 构建已取消 无法成功启动或连接到
  • 回发后保持网格视图中 div 的滚动条位置

    我在 web config 中使用了以下代码 以便在服务器回发后保持滚动条位置
  • Signalr - 发送消息的重写方法

    我有一个实施PersistentConnectionSignalr 中的类 对于我们的网站 我需要能够广播消息 然后让每个连接确定该特定消息是否与该特定用户相关 然后再将其通过管道发送到浏览器 像这样的事情 public class MyC
  • EditorFor 的最小值和最大值

    我一直在尝试这段代码来设置我的最小值和最大值EditorFor
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr

随机推荐

  • 【python-数据分析】笔记1

    数据库vs 仓库 数据库 gt 业务存储 针对应用 仓库 gt 主题存储 针对分析 数据来源 Kaggle 阿里云天池 在python console输入 import pandas as pd df pd read csv data HR
  • 理解javascript的同步与异步模式

    你可能知道 Javascript语言的执行环境是 单线程 single thread 所谓 单线程 就是指一次只能完成一件任务 如果有多个任务 就必须排队 前面一个任务完成 再执行后面一个任务 以此类推 这种模式的好处是实现起来比较简单 执
  • Leetcode 第 43 场双周赛题解(Python)

    Leetcode 第 43 场双周赛题解 周赛日期 2020 01 09 题目1 1716 计算力扣银行的钱 难度 简单 Hercy 想要为购买第一辆车存钱 他 每天 都往力扣银行里存钱 最开始 他在周一的时候存入 1 块钱 从周二到周日
  • 《一个操作系统的实现》读书笔记--第二章--搭建工作环境

    一 熟悉Bochs虚拟机 第一章我们使用虚拟机VMware运行了该最最简单的操作系统 由于VMware虚拟机不具备调试操作系统的功能 因此对于开发操作系统的程序员来说 VMware是不完备的 故本章介绍另一款虚拟机Bochs 下面我们就介绍
  • python 连续比较_python等值和大小比较

    等值 大小比较 在python中 只要两个对象的类型相同 且它们是内置类型 字典除外 那么这两个对象就能进行比较 关键词 内置类型 同类型 所以 两个对象如果类型不同 就没法比较 比如数值类型的数值不能和字符串类型的数值或字母比较 对于py
  • 计算机图形学GAMES101(十五)光线追踪(蒙特卡洛积分与路径追踪)

    本节涉及内容 蒙特卡罗积分 路径追踪 蒙特卡罗积分 蒙特卡罗积分的核心思想还是求一个不规则图形的面积 它的做法是 首先在a和b之间找一个值xi然后求f x 接着以f x 为高 ab为宽求矩形的面积 最后将所有的值求平均 当采样数量xi趋于无
  • C++斩题录

    个人主页 平行线也会相交 欢迎 点赞 收藏 留言 加关注 本文由 平行线也会相交 原创 收录于专栏 手撕算法系列专栏 LeetCode 本专栏旨在提高自己算法能力的同时 记录一下自己的学习过程 希望对大家有所帮助 希望我们一起努力 成长 共
  • 华南技术栈CNN+Bilstm+Attention

    我的目标适用于文本分类 这里有一个 技术栈完全一样但是目标不一样的应该可以参考 现在的情况 2022年7月6日21 16 04已解决 换成了CPU 因为电脑太破旧了 cuda跟不上pytorch官网 已安装 cuda cudnn anaco
  • 兼阅万分享:适合上班族下班时间做的6项兼职小副业

    你的收入还在8000以下 车贷 房贷 孩子学费 兴趣班费用要交 开车油门踩深点 都会心疼油费 每个月的压力都很大 白天要干活 有没有适合晚上下班后做的兼职或者副业 今天推荐6项 可以保存下来 如果真的撑不住了 挑一个干 虽然发不了大财 但改
  • python提高办公效率-【纯干货】提高Python运行效率的小窍门

    Python是一门优秀的语言 它能让你在短时间内通过极少量代码就能完成许多操作 不仅如此 它还轻松支持多任务处理 比如多进程 不喜欢Python的人经常会吐嘈Python运行太慢 但是 事实并非如此 尝试以下六个窍门 来为你的Python应
  • 爬虫日常练习-selenium登录12306

    文章目录 前言 页面分析 代码设计 前言 hello 好兄弟们 经过前面几篇文章后 想必小伙伴们对于简单的网页文本爬取 图片爬取类的内容已经熟练掌握了 今天我们开始练习一个新的内容 selenium 有关这一块的基础知识网上太多了 我们作为
  • 微信小程序如何测试?

    不需要安装 只要在微信里找到这个小程序打开即可使用 由于小程序的便捷 如今越来越多的平台开发方都纷纷推出自身的小程序应用 那我们该如何进行微信小程序测试呢 1 功能测试 功能测试以需求文档和交互视觉文档为准 如果没有这些文档 参考APP的测
  • 卷积神经网络的评价_金工研报:利用卷积神经网络进行多因子选股

    写在前面 下面这篇文章的内容主要来自华泰证券的研究报告 人工智能选股之卷积神经网络 文中首先通过对卷积神经网络 CNN 进行分析 然后通过将因子数据转换为二维图片的形式 并根据CNN原理给出了通过CNN运用于多因子选股的经验和方法 最后通过
  • map中取值转BigDecimal报错 java.lang.Integer cannot be cast to java.math.BigDecimal

    Map
  • Elasticsearch 中文分词&多词搜索&权重

    目录 中文分词器 一 安装中文分词器ik 二 使用中文分词器 多词搜索 权重 中文分词器 一 安装中文分词器ik 源码地址 https github com medcl elasticsearch analysis ik 根据提示 进行安装
  • HLS 流传输库hls::stream

    流传输数据是一种数据传输形式 其中数据样本从第一个样本开始按顺序发送 流传输不需要地址管理 Vivado HLS 提供了 C 模板类 hls stream lt gt 用于对流传输数据结构进行建模 使用 hls stream lt gt 类
  • 前端加密和解密

    Base64加密 加密 Base64 encode Base64 encode 解密 Base64 decode Base64 decode url携带参数加密 加密 encodeURLComponent encodeURLComponen
  • 【Unity】一个简单的无限列表

    1 根据InfiniteElem 的高度和总个数 计算出Content的长度 2 根据Content所在的滚动位置 计算出当前哪些InfiniteElem显示在列表中 3 循环是生成的几个InfiniteElem显示列表内容 实现无限列表
  • LeetCode-1827. 最少操作使数组递增【贪心,数组】

    LeetCode 1827 最少操作使数组递增 贪心 数组 题目描述 解题思路一 简单暴力 解题思路二 优化1 ans是操作数 mx是当前最大元素 mx无论如何会依次递增 解题思路三 优化2 遇到小的数就pre 1 否则变为num 题目描述
  • C# 文件上传

    获取POST 请求发送的文件 并保存到服务器 HttpPostedFile file System Web HttpContext Current Request Files file 获取上载文件名称 string FileName fi