layui选择多张图片上传多图上传到服务器保存

这篇具有很好参考价值的文章主要介绍了layui选择多张图片上传多图上传到服务器保存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解。对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的upload.render方法已经帮我们封装好了,我们只管调用即可,也就是说你选中了几张图片,那么将会向后台请求与图片张数相同的次数,即为遍历提交的方式。

前端:

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

<!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>
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <link href="/JS/layui/css/layui.css?v=1.0" rel="stylesheet" />
    <link href="/layuiadmin/style/admin.css?v=1.0" rel="stylesheet" />
    <%--以下两条是弹confirm需要--%>
    <link href="/css/bootstrap.min.css?v=1.0" rel="stylesheet" />
    <link href="/CSS/jquery-confirm.css?v=1.0" rel="stylesheet" />
    <script src="/JS/jquery-3.4.1.js?v=1.0"></script>
    <script src="/JS/layui/layui.js?v=1.0"></script>
    <script src="/JS/jquery-confirm.js?v=1.0"></script>
</head>
<body>

    <div class="layui-fluid">
        <div class="layui-card">
            <div class="layui-card-body" style="padding: 15px;">
                <form class="layui-form">
                    <div class="layui-card">
                        <div class="layui-card-body">
                            <div class="layui-tab  layui-tab-card" lay-filter="component-tabs-card">
                                <div class="layui-tab-content">
                                <div class="layui-tab-item" style="display:block;">
                                    上传附件
                                        <div class="layui-upload">
                                            <button type="button" class="layui-btn" id="multiple_img_upload">多图片上传</button>
                                            <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px; ">
                                                预览:
                                            <div class="layui-upload-list" id="div-slide_show"></div>
                                            </blockquote>
                                        </div>
                                </div>
                            </div>
                        </div>
                    </div>
            </div>
            <div class="layui-form-item layui-layout-admin">
                <div class="layui-input-block">
                    <div class="layui-footer" style="left: 0; height:66px;">
                        <button type="button" class="layui-btn sim_btn">提交</button>
                        <input type="button" id="btnReset" class="layui-btn layui-btn-primary" value="重置" />
                    </div>
                </div>
            </div>
            </form>

        </div>
    </div>
    </div>

    <input type="hidden" name="imgs" class="multiple_show_img" value="" /><%--用于保存多图上传的资源数组--%>

    <script type="text/javascript">
        //这里一定要设置全局变量,不然下面用的时候,未定义
        var multiple_images = [];
        var layer, form, laypage, laydate, upload, layedit, indexs, indexsMan, element;
        $(function () {
            layui.use(['form', 'layedit', 'upload'], function () {
                layedit = layui.layedit,
                    form = layui.form,
                    upload = layui.upload;
                
                //多图片上传
                upload.render({
                    elem: '#multiple_img_upload'
                    , url: "/ASHX/SetImg.ashx?actionMore=MoreIMG"
                    , multiple: true
                    , before: function (obj) {
                        
                        var files = obj.pushFile(); //将每次选择的文件追加到文件队列
                        //var len = getJsonLength(files);
                        var fileAllNum = 10;//允许每次上传附件的数量
                        var yishangchuan = $('.multiple_show_img').val();//已经上传完的图片的路径集合,多个以,号分隔
                        var arrImgNum = 0;//计算出共几张图
                        if (yishangchuan != "") {
                            if (yishangchuan.indexOf(",") > 0) {//如果有至少2张图片
                                arrImgNum = yishangchuan.split(',').length;//计算出共几张图
                            }
                        }
                        //arrImgNum = arrImgNum == arrImgNum ? 2 : arrImgNum;
                        //alert(arrImgNum);
                        //alert(len);
                        //alert(fileAllNum);
                        if (arrImgNum < fileAllNum) {
                            //预读本地文件示例,不支持ie8 
                            obj.preview(function (index, file, result) {
                                $('#div-slide_show').append('<img src="' + result + '"  id="' + file.name + '"  name="' + file.name + '"  alt="' + file.name + '"  title="点击删除" class="layui-upload-img" style="width: 100px;height: 100px;" onclick="delMultipleImgs(this)" onmouseover="imgover(this)" onmouseout="imgout(this)" />&nbsp;')
                                delete files[index];//删除列表中已经上传过的对应的文件,一般在某个事件中使用;防止重复上次预览的数据进行的提交问题。
                            });
                        }
                        else {
                            layer.msg("上传文件最大不允许超过" + fileAllNum + "个");
                            return false;
                        }
                    }
                    , done: function (res) {
                        //如果上传成功
                        //alert(index);
                        if (res.State == true) {
                            //追加图片成功追加文件名至图片容器1647508248937-0 1647508263902-0 1647508248937-0
                            //alert(res.Data);
                            multiple_images.push(res.Data);
                            $('.multiple_show_img').val(multiple_images);//把多选择的图片的地址统一放这里

                            //$('.multiple_show_img').val("");
                            //multiple_images = [];
                            //delete this.files[index];
                        } else {
                            //提示信息
                            layer.msg(res.Message);
                        }
                    }
                });
                //多图片上传

            });//对应layui.use(['index', 'layer', 'form', 'laypage', 'laydate', 'upload', 'jquery', 'layedit'], function () {


            //提交表单
            $("body").on("click", ".sim_btn", function () {
                SaveData();
            });

        });//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {//对应$(function () {


        function SaveData() {//
            /上传附件开始/

            var uploadFiles = $('.multiple_show_img').val();//把上传附件多选择的图片的地址统一放这里
            alert(uploadFiles);
            return false;
            /上传附件结束/

            //if (names == "") {
            //    errorMsg = "请输入姓名";
            //}
            //alert(errorMsg);
            //return false;
            if (errorMsg != "") {
                layer.msg(errorMsg, { icon: 7 });
                return false;
            } else {
                loadIndex = layer.load(0);
                var url = "/ClinicalControl/Case_ADD.aspx";
                var data = {
                    'action': 'SaveData'
                    , 'id': id
                    , 'uploadFiles': uploadFiles
                    , 'updateCRIDMan': updateCRIDMan
                    //, 'test': test 
                    //, 'test': test 
                }
                $.ajax({//
                    type: "POST",
                    url: url,
                    dataType: "JSON",
                    data: data,
                    success: function (result) {
                        if (result.State) {
                            layer.close(loadIndex);
                            if (result.Data != "") {
                                layer.msg(result.Data, { icon: 7 });
                            }
                            else {
                                layer.msg("操作成功", { icon: 6 });
                            }
                            setTimeout(closeRefresh, 1000);//关闭当前iframe,刷新指定iframe
                        }
                        else {
                            layer.msg(result.Data, { icon: 7 });
                        }
                    }, complete: function (result) {
                        layer.close(loadIndex);
                    }
                });
            }

        }

        //单击图片删除图片 【注册全局函数】
        function delMultipleImgs(this_img) {
            $.confirm({
                title: '提示',
                content: '确定要删除吗?',
                confirm: function () {
                    //获取下标
                    var subscript = $("#div-slide_show img").index(this_img);
                    //删除图片
                    this_img.remove();
                    //删除数组
                    multiple_images.splice(subscript, 1);
                    //重新排序
                    multiple_images.sort();
                    $('.multiple_show_img').val(multiple_images);
                },
                cancel: function () {
                    layer.msg("操作取消", { icon: 6 });
                }
            });
            
            //返回
            return;
        }
        //上传附件鼠标悬停提示框
        function openMsg01(tempid) {
            subtips01 = layer.tips('点击图片删除', '#div-slide_show', { tips: [1, '#ff6700'], time: 30000 });
        }
        //鼠标悬停提示框
        function imgover(img) {
            openMsg01("");
        }
        function imgout(img) {
            layer.close(subtips01);
        }

    </script>
</body>
</html>

/ASHX/SetImg.ashx文件

using Common;
using Model;
using System;
using System.Drawing;
using System.IO;
using System.Web;

namespace MyProject.ASHX
{
    /// <summary>
    /// SetImg 的摘要说明
    /// </summary>
    public class SetImg : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            string action = "";
            string actionMore = "";
            context.Response.ContentType = "text/plain";
            if (context.Request.Form["action"]!=null)
            {
                action = context.Request.Form["action"].ToString();//AJAX传参
            }
            if (context.Request["actionMore"] != null)
            {
                actionMore = context.Request["actionMore"].ToString();//URL传参
            }
            
            switch (action)
            {
                case "ConvertIMG":
                    ConvertIMG(context);
                    break;
                default:
                    break;
            }
            switch (actionMore)//多图上传
            {
                case "MoreIMG":
                    MoreIMG(context);
                    break;
                default:
                    break;
            }


        }

        /// <summary>
        /// 单张图片上传
        /// </summary>
        /// <param name="context"></param>
        public void ConvertIMG(HttpContext context)
        {
            string imgurl = context.Request.Form["imgurl"].ToString();
            string strFilePath = "";
            string strReturnFilePath = "";//返回前端的路径,用于存入SQL
            string imgname = "";
            if (imgurl.IndexOf("data:image") >= 0)
            {
                string base64 = imgurl.Split(',')[1];//规范化,逗号前面的是标识符,用于说明原图片的名字和格式
                string path = context.Server.MapPath("/");//获取网站的根路径
                string strRand = PublicHelper.RanStr(10, true);
                string strSuffix = ".jpg"; //文件的后缀名根据实际情况
                strReturnFilePath = "\\UploadFile\\" + System.DateTime.Now.Year.ToString() + "\\" + System.DateTime.Now.Month.ToString() + "\\" + System.DateTime.Now.Day.ToString() + "\\";
                string strPath = path + strReturnFilePath;//在本地硬盘的绝对路径
                imgname = strRand + strSuffix;
                if (!System.IO.Directory.Exists(strPath))
                {
                    System.IO.Directory.CreateDirectory(strPath);
                }
                //string local = "UploadFile\\" + System.DateTime.Now.Year.ToString() + "\\" + System.DateTime.Now.Month.ToString() + "\\" + System.DateTime.Now.Day.ToString() + "\\";
                //strFilePath = "/UploadFile/" + DateTime.Now.ToString("yyyyMMdd") + strRand + strSuffix;
                strFilePath = strPath.Trim().Replace("\\", "/");
                strReturnFilePath = strReturnFilePath.Trim().Replace("\\", "/") + imgname;
                MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
                Bitmap bit = new Bitmap(stream);
                bit.Save(strPath + imgname);//保存图片到本地
            }

            ResultInfo resultInfo = new ResultInfo() { State = false };
            if (strFilePath != "")
            {
                resultInfo.Data = strReturnFilePath;
                resultInfo.State = true;
            }
            string resultJson = JsonHelper.ObjectToJSON(resultInfo);
            context.Response.Write(resultJson);
            context.Response.End();
        }

        /// <summary>
        /// 多张图片上传
        /// </summary>
        /// <param name="context"></param>
        public void MoreIMG(HttpContext context)
        {
            string strFilePath = "";
            if (context.Request.Files.Count > 0)
            {
                //HttpPostedFile f = context.Request.Files[0];
                //f.SaveAs(context.Server.MapPath(f.FileName));

                ResultInfo resultInfo = new ResultInfo() { State = false };
                int isCheck = 0;//上传附件是否通过验证
                var file = context.Request.Files[0];
                string extension = System.IO.Path.GetExtension(file.FileName);//获取文件后缀名FileSize
                string strFileExtension = PublicHelper.GetValue("FileExtension");//配置文件允许上传的附件类型
                string strFileSize = PublicHelper.GetValue("FileSize");//配置文件允许上传的附件类型

                if (strFileExtension.IndexOf(extension.ToLower()) < 0)
                {
                    isCheck = 1;
                    resultInfo.Message = "不支持此附件类型";
                }
                if (file.ContentLength > Convert.ToInt32(strFileSize))
                {
                    isCheck = 1;
                    resultInfo.Message = "上传附件过大";
                }
                if (isCheck == 0)
                {
                    //定义本地路径位置
                    string local = "UploadFile\\" + System.DateTime.Now.Year.ToString() + "\\" + System.DateTime.Now.Month.ToString() + "\\" + System.DateTime.Now.Day.ToString() + "\\";
                    //string filePathName = string.Empty;
                    string localPath = Path.Combine(HttpRuntime.AppDomainAppPath, local);

                    //var tmpName = HttpContext.Current.Server.MapPath("~/UploadFile/" + strCFID + "/" + System.DateTime.Now.ToString("yyyyMMdd") + "/");
                    //var tmp = file.FileName;
                    //var tmpIndex = 0;

                    //不带路径的最终文件名
                    string strRand = PublicHelper.RanStr(10, true);
                    string filePathName = strRand + PublicHelper.FilterSQL(file.FileName);//过滤文件名中的SQL敏感字符
                    if (!System.IO.Directory.Exists(localPath))
                    {
                        System.IO.Directory.CreateDirectory(localPath);
                    }
                    //if (System.IO.Directory.Exists(localPath))
                    //{
                    //    string a1 = "";
                    //}
                    //else
                    //{
                    //    System.IO.Directory.CreateDirectory(localPath);
                    //}
                    string localURL = Path.Combine(local, filePathName);
                    file.SaveAs(Path.Combine(localPath, filePathName));   //保存图片(文件夹)


                    resultInfo.Data = "/" + localURL.Trim().Replace("\\", "/"); 
                    resultInfo.State = true;
                    resultInfo.Message = "";
                }
                
                string resultJson = JsonHelper.ObjectToJSON(resultInfo);
                context.Response.Write(resultJson);
                context.Response.End();

            }

            //string imgurl = context.Request.Form["imgurl"].ToString();
            //if (imgurl.IndexOf("data:image") >= 0)
            //{
            //    string base64 = imgurl.Split(',')[1];//规范化,逗号前面的是标识符,用于说明原图片的名字和格式
            //    string path = context.Server.MapPath("/");//获取网站的根路径
            //    string strRand = PublicHelper.RanStr(10, true);
            //    string strSuffix = ".jpg"; //文件的后缀名根据实际情况
            //    string strPath = path + "\\UploadFile\\" + DateTime.Now.ToString("yyyyMMdd") + strRand + strSuffix;
            //    strFilePath = "/UploadFile/" + DateTime.Now.ToString("yyyyMMdd") + strRand + strSuffix;
            //    MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
            //    Bitmap bit = new Bitmap(stream);
            //    bit.Save(strPath);//保存图片到本地
            //}

            //ResultInfo resultInfo = new ResultInfo() { State = false };
            //if (strFilePath != "")
            //{
            //    resultInfo.Data = strFilePath;
            //    resultInfo.State = true;
            //}
            //string resultJson = JsonHelper.ObjectToJSON(resultInfo);
            //context.Response.Write(resultJson);
            //context.Response.End();
        }



        public bool IsReusable
        {
            get
            {
                return false;
            }
        }


    }
}

PublicHelper.RanStr(10, true);方法

        /// <summary>
        /// 获取随机字符串
        /// </summary>
        /// <param name="Length">生成长度</param>
        /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
        /// <returns></returns>
        public static string RanStr(int Length, bool Sleep)
        {
            if (Sleep)
                System.Threading.Thread.Sleep(3);
            char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            string result = "";
            int n = Pattern.Length;
            System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
            for (int i = 0; i < Length; i++)
            {
                int rnd = random.Next(0, n);
                result += Pattern[rnd];

            }
            return result;
        }

PublicHelper.FilterSQL(file.FileName);

        /// <summary>
        /// 后台过滤SQL关键字
        /// </summary>
        /// <param name="str">参数SQL语句</param>
        /// <returns></returns>
        public static string FilterSQL(string str)
        {
            //string filterSQL = "'|and|exec|insert|select|delete|update|count | *|%| chr | mid | master | truncate | char | declare |;| or | -| + | ,";
            string filterSQL = "exec|insert|delete|update|count|*|chr|mid|master|truncate|char|declare|;";
            string[] strArray = filterSQL.Split('|');

            for (int i = 0; i < strArray.Length; i++)
            {
                if (str.IndexOf(strArray[i]) >= 0)
                {
                    str = str.Replace(strArray[i], "");
                }
            }
            return str;
        }

配置文件文章来源地址https://www.toymoban.com/news/detail-566972.html

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
  <!--允许上传的附件类型-->
  <add key="FileExtension" value=".jpg.jpeg.gif.png.bmp" />
  <!--允许每次上传附件的大小,以byte为单位,1048576是一M。-->
  <add key="FileSize" value="10485760" />
  <!--允许批量上传附件的数量-->
  <add key="FileAllNum" value="3" />

  
</appSettings>

到了这里,关于layui选择多张图片上传多图上传到服务器保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [小程序]向服务器上传图片和从服务器下载图片

    本例的服务器基于flask,配置flask可以参见 [Flask]上传多个文件到服务器 https://blog.csdn.net/weixin_37878740/article/details/128435136?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170581653516800185854860%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_id=170581653516800185854860biz_id=0utm_m

    2024年02月20日
    浏览(30)
  • halo --- 上传图片服务器错误

       上传图片时,报错服务器错误(包括上传附件、博客文章插入图片、上传相册)   1、查看日志 报错的是数据库操作异常 但是检查数据库后确认了数据库是正常在跑   2、再次上传一张小一点的图片    发现上传成功了 猜测是受到了nginx的上传文件大小的限制   3、检查

    2024年02月13日
    浏览(43)
  • 前后端服务器分离时,前端如何上传图片到前端服务器?

    当前后端服务器分离时,前端上传图片到前端服务器可以采用以下几种方式: 1. 直接上传到前端服务器:可以通过使用HTML的`input type=\\\"file\\\"`元素,让用户选择图片文件并直接上传到前端服务器。前端服务器可以使用后端提供的API接口处理上传请求,然后将图片保存到前端服务

    2024年04月27日
    浏览(34)
  • UE4-上传图片到服务器

    由于 VaRest 插件无法满足我们上传表单的需求,在这里需要使用其他库方法。 优点: httplib 库是一个以 C++11 特性编写的库,所以编译器也需要能支持 C++11 的。库在使用时只需包含一个头文件即可,非常方便。 缺点: 此库为线程阻塞,使用时还请注意。 由于上传图片需要提

    2024年02月07日
    浏览(38)
  • 13、微信小程序:上传图片到服务器

    1、上传图片到服务器,有两个步骤:     1.1  拿到可上传的图片 wx.chooseImage     1.2  将图片上传到服务器  wx.uploadFile 2、代码实现 button bindtap=\\\"upload\\\"点击上传/button image src=\\\"{{imgPath}}\\\" mode=\\\"\\\"/

    2024年02月12日
    浏览(30)
  • vue2使用 tinymce富文本编辑器-图片上传、粘贴图片上传致服务器

    1.安装tinymce富文本编辑器插件 npm i tinymce npm i @tinymce/tinymce-vue 2.创建Editor.js文件 封装组件 以便使用 3.汉化包 (我放在public/tynymce/langs文件夹里) 4.vue组件中使用 本次记录重点在于 上传图片方法 需要区分工具栏中图片上传方法 以及 粘贴进去的图片也需要走上传方法。两个方

    2024年02月09日
    浏览(40)
  • Unity向Web服务器上传和下载图片

    Unity的WWW不但能上传下载文本形式的数据,还可以上传下载图片,不过在传输过程中,图片的信息需要转为文本格式。 在上传的这段代码中,我们使用EncodeToPNG函数将图片转出为byte数组,使用WWWForm的方式上传到Web服务器上,与之前不同的是,这一次上传的PNG格式的图片。当上

    2024年02月03日
    浏览(39)
  • Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】

    前言 以下只提供一种思路,对新手可能不太友好。 这里将前端Vue上传的图片直接存储到服务器上, Alibaba Cloud OSS : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储

    2024年02月06日
    浏览(49)
  • js将项目中的图片上传到服务器

    项目上有时候会有奇怪的需求,比如前端有一些示例,想点击按钮就能上传图片,而这个图片是在前端的项目中的,如果不上传吧,又获取不到一些业务数据的id,但后端又不想为这块功能做特殊的处理,这时想通过前端直接上传到后端,需要file对象才可以。 这个时候我们需

    2024年02月12日
    浏览(45)
  • vue3 + fastapi 实现选择目录所有文件自定义上传到服务器

    大家好,我是yma16,本文分享关于vue3 + fastapi 实现选择目录文件上传到服务器指定位置。 vue3系列相关文章: 前端vue2、vue3去掉url路由“ # ”号——nginx配置 csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板 认识vite_vue3 初始化项目到打包 python_selenuim获取csdn新星

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包