• 热门搜索 热门搜索
菜单

您现在的位置是:博客 > 文章详情文章详情

ajax静态上传file文件,并预览图片

原创
时间2023/10/24 01:35:24 发布 预览数量423
分类: c# html .net 标签: C# Javascript

一、前言

最近在做一个项目, 需要静态上传文件到后台,并且在没有提交表单前可以查看上传的文件,看公司代码,都是使用 ifrome 标签实现的, 比较麻烦,于是发现有更简单的方法,支持ajax静态上传,支持上传多文件,好了,废话少说,直接上代码吧

1、前台页面代码:

    <h1>注意:ie浏览器必须是ie10及以上版本才可以</h1>
    <input type="file" id="fileUpload" />
    <img src="" style="display:none" id="img-show" />

    <input type="button" value="ajax静态上传图片" id="ajax-btn" />

2、Jquery代码

    <script type="text/javascript">
        $(function () {
            fileUpload();
            Ajaxbtn();
        });
        function fileUpload() {
            $("#fileUpload").change(function () {
                var Suffix = $(this).val().substring($(this).val().lastIndexOf('.'));
                if (Suffix == ".jpg" || Suffix == ".jpeg" || Suffix == ".png" || Suffix == ".bmp") {
                    //加载图片
                    var file = document.getElementById("fileUpload").files[0];
                    var img = document.getElementById("img-show");  //获取img对象
                    var reader = new FileReader();    //建一条文件流来读取图片  
                    reader.readAsDataURL(file);  //根据url将文件添加的流中
                    //实现onload
                    reader.onload = function (e) {
                        url = reader.result;  //获取文件在流中url  
                        img.src = url;  //将url赋值给img的src属性
                    };
                    $("#img-show").css("display", "block");
                }
                else {
                    alert("图片格式不正确!(正确格式:.jpg、.jpeg、.png、.bmp)");
                }
            });
        }

        function Ajaxbtn() {
            $("#ajax-btn").click(function () {
                //判断是否有要上传的文件
                var length = $("#fileUpload").prop("files").length;
                if (length > 0) {
                    var formData1 = new FormData();
                    // 遍历要上传的文件
                    for (var i = 0; i < length; i++) {
                        formData1.append('fileName' + (i + 1), $("#fileUpload").prop("files")[i]);
                    }
                    // 提交图片数量
                    formData1.append('count', length);
                    //开始上传图片
                    if (length > 0) {
                        $.ajax({
                            url: 'Handler.ashx',
                            type: 'POST',
                            data: formData1,
                            contentType: false,
                            processData: false,
                            async: false,
                            success: function (json) {
                                if (json.status == "true") {
                                    alert("上传成功!文件名为:" + json.data);

                                }
                                else {
                                    alert(json.msg);
                                    return false;
                                }
                            },
                            error: function () {
                            }
                        })
                    }
                }
                else {
                    alert("请上传图片");
                }
            });
        }
    </script>

3、后台操作

using System;
using System.Web;
using System.Web.Script.Serialization;

public class Handler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/html";

        if (context.Request.Files.Count > 0)
        {
            int count = Convert.ToInt32(context.Request["count"]);
            string pathArray = string.Empty;
            Random ran = new Random();
            //判断上传图片的数量
            for (int i = 1; i <= count; i++)
            {
                //获取文件
                var fileName = "fileName" + (i).ToString();
                HttpPostedFile file = context.Request.Files[fileName];
                //获取后缀名
                string imgtype = System.IO.Path.GetExtension(file.FileName);
                //判断是不是图片
                if (imgtype != ".jpg" && imgtype != ".jpeg" && imgtype != ".png" && imgtype != ".bmp" && imgtype != ".jpeg")
                {
                    WriteJson(context.Response, "error", "图片格式不正确");
                    break;
                }
                else
                {
                    //拼接文件名
                    string name = DateTime.Now.ToString("yyyyMMddHHmmss") + ran.Next(100, 500) + imgtype;
                    //文件路径
                    string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + string.Format(@"img\{0}",name);
                    //保存
                    file.SaveAs(path);

                    //拼接保存到数据汇总的数据
                    pathArray +=  name+";";
                }

            }
            if (pathArray.Length > 0)
            {
                WriteJson(context.Response, "true", null, pathArray);
            }

        }
        else
        {
            WriteJson(context.Response, "error", "请选择要上传的文件");
        }
    }
    public static void WriteJson(HttpResponse response, string status1, string msg1, object data1 = null)
    {
        response.ContentType = "application/json";
        var obj = new { status = status1, msg = msg1, data = data1 };
        string json = new JavaScriptSerializer().Serialize(obj);
        response.Write(json);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

二、源码下载

地址:https://pan.baidu.com/s/1r_kPP3KFkHiMYU59UYF8yA 密码:08rj

版权声明:本文为Converts的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.converts.cn/article/1493.html

暂无评论

暂无评论

目录

推荐阅读

  • 如何使用 vs 2022 远程调试 Linux系统中的Docker容器项目

    一、前言 在项目上,总会遇到一些奇怪的问题,例如:“在本地好好的, 为什么部署到线上就不行” 等等,这样的问题时长困扰着我们。但是作为一个资深的码农,“远程调试” 是一个不可或缺的手段。下面就来看下如果使用 vs 在本地远程调试部署在Linux系统中,运行在Docker容器中的项目吧。 二、远程调试 调试的前提,

  • 移除Linux系统启动时的等待时间

    一、前言 VMware 虚拟机中安装了很多Linux 系统,每次启动的时候, 都卡在系统选择的界面上,除非手动选择, 否则要等很久才会进入系统,如下图所示: ![移除Linux系统启动时的等待时间](/ArticleFile/2024-06-24/e3ab02212cc946bd9c23159895177fb3.png '移除Linux系统启动时的等待时间') 二、关闭系统等待的事件 我们

  • GitLab 私有化部署

    一、GitLab 概述 git作为目前最流行的代码管理工具,已经成为了程序员必备的技能。虽然目前有 github(对国人不太友好) 、gitee 两个比较大的代码托管平台。但是出于各种原因,搭建自己的私有代码平台也成了一部分开发人员的选择。针对这种需求,这里为大家介绍的是其中的佼佼者gitlab,也是我们公司内部正在使用的一个代码管理平台。 GitLab是一个基于Git的开源代码管理平台,它

  • 云服务器购买按量付费实例,并搭建私有网络图解

    一、前言 最近在自学 k8s 集群化部署, 奈何云服务器包年包月太贵了, 学习成本飙升。好在各大云服务商支持按量计费 , 接下来就带大家一起过一下购买流程,并且使用私有网络。 二、私有网络 在购买云服务器之前,先了解下什么是私有网络。官网给出的解释是:私有网络(Virtual Private Cloud,VPC)是一块在云服务器上自定义的逻辑隔离网络空间,可以使云服务器, 云数据库资源构建逻

  • Docker 部署FastTunnel,实现内网穿透

    一、前言 最近在学习搭建Elasticsearch集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台64G内存的闲置电脑。不如做一个内网穿透,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~ 二、什么是 FastTunnel FastTunnel 是用.net

  • IP地址和子网掩码的关系

    一、概述 IP地址(Internet Protocol Address)和子网掩码(Subnet Mask)是计算机网络中两个核心的概念,它们共同工作以确保数据能够正确地在复杂的网络环境中传输到目标设备。 二、IP地址 `IP地址`是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是一个32位的二进制数,但是在习惯上,我们

  • 修改Docker默认的存储驱动程序目录

    一、前言 今天使用jenkins对程序进行更新的时候,发现更新失败。经排查是因为系统磁盘满了,然而通过堡垒机看了下,系统空间还有很多,于是看了下系统分区: ![修改Docker默认的存储驱动程序目录](/ArticleFile/2024-06-06/444ede8a1b1b42058db18690fa995952.png '修改Docker默认的存储驱动程序目录') ![修改Docker默认

  • Windows 安装git的详细安装步骤 ,以及TortoiseGit 图形化工具

    一、前言 `Git` 是一个开源的分布式版本控制系统,用于有效、高速地处理从很小到非常大的项目版本管理。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持。 二、安装Git 1、Git 下载地址 [Git 下载地址](https://git-scm.com/downloads "Git 下载地址") ![Windows

  • 免费的 GIF 录屏工具下载

    一、前言 在写博客或者文档的时候,经常需要附上一些gif动图,可以让快速展示操作流程。下面`小C`就介绍几款我经常用到的几款免费的gif工具。 二、免费的Gif工具 1、GifCam GifCam是一款免费绿色软件,它能够录制屏幕上的动态内容,并将其保存为GIF动画图像。用户可以调整录制区域、帧速率等参数,以满足不同的录制需求。除了连续录制外,GifCam还支持单帧录制功能。用户可以手

  • 对比MySQL不同版本下表结构和数据存储的差异

    一、前言 在开始之前, 我们需要先了解一下 MySQL 的存储引擎有哪些。 `MySQL`常用的存储引擎有 InnoDB 和 MyISAM,而且两者都有各自的特点,适用于不同的场景。下面是对这两种存储引擎的简要对比: - InnoDB存储引擎 - 支持事务处理 - 支持行级锁 - 支持外键约束 - 可以根据事务日志实现数据恢复 - MyISAM存储引擎 - MyISAM 的读取性能

加载中