『PasteSpider』
最新文章
贴代码出品
热门话题
用户问答
lao人言
「搜索」
【本期话题】更多
三人寄语更多
往往会为了一个项目,搭建适合他专属的脚手架!
点赞:1
没有最好的语言,只有更合适的语言!
点赞:0
逻辑注解清晰的代码优于那些一眼看不明白的语法糖
点赞:0
由于时间的问题,我们往往会给自己埋坑,等着后续或者下一任来填!
点赞:0
慎用redis的同步我的意见是redis都走异步!!!
点赞:0
时好时坏的结果,往往是多线程引起的逻辑混乱导致的!
点赞:0
时间与空间总是在换来换去,鱼和熊掌往往不可同得!
点赞:0
实际遇到的问题往往在那些视频课程中是不会出现的!
点赞:0
对于答案来说,更重要的是找到答案的这个过程而不是答案本身!
点赞:0
在循环里面慎重的使用await!
点赞:0
贴代码框架PasteForm特性介绍之file特性(上传文件)
尘埃 2024-12-03 142 7 0
PasteForm的表单中,对于上传文件(非图片,比如xlsx,zip,rar等)也是支持的,主要是对路径,和存放路径的设定,至于上传后存储在哪,怎么操作还是由代码本身来决定,PasteForm中只是做了样式的统一,所以这个特性很容易上手!

简介

PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等

案例源码

案例源码在

https://gitee.com/pastecode/paste-template

不定期升级

AllInDto!

通过引入PasteForm,一个项目哪怕100个数据表,一般的管理页面也才不到10个,除非有非常多的特殊功能,否则都能用PasteForm中的表格和表单来实现!

在这里插入图片描述

本次的特性介绍,涉及的东西会多一些,你可以下载源码后,看看详细的,我们先来查看下各个特性的信息

file

其实可以使用image的接口,他们2个的返回格式都是一样的,wangEditor的返回格式,主要是UI上不一样,毕竟文件没法预览

字段 类型 示例 说明
args1 字符 /api/app/Upload/UpFile 表示上传的路径,默认是/api/app/Upload/UpFile,你也可以自己修改他,args1或者args3必填其中一个
args2 字符 file datadir
args3 字符 global_upload_file(this); onchange函数
args4 字符 待定 为后续扩展做准备

案例的Dto


    /// <summary>
    /// 上传文件案例
    /// </summary>
    public class FileModel
    {

        ///<summary>
        ///姓名 模拟短文本输入
        ///</summary>
        [MaxLength(32)]
        [Required]
        public string Name { get; set; }

        ///<summary>
        ///文本区域 模拟文本区域的输入
        ///</summary>
        [MaxLength(128)]
        public string Desc { get; set; }

        ///<summary>
        ///文本区域 长度大于128则自动为textarea
        ///</summary>
        [MaxLength(256)]
        public string Text { get; set; }

        /// <summary>
        /// 文件1 默认配置,使用默认的路径上传
        /// </summary>
        [ColumnDataType("file")]
        public string File1 { get; set; } = "";

        /// <summary>
        /// 文件2 定义存储路径
        /// </summary>
        [ColumnDataType("file", "", "xpath")]
        public string File2 { get; set; } = "";

        /// <summary>
        /// 文件3 自定义上传地址,注意headers
        /// </summary>
        [ColumnDataType("file", "/api/app/Upload/UpFile?type=abc")]
        public string File3 { get; set; } = "";

        /// <summary>
        /// 文件4 自定义onchange函数
        /// </summary>
        [ColumnDataType("file", "", "", "funcUploadFile(this);")]
        public string File4 { get; set; } = "";
    }

运行后的UI

在这里插入图片描述

上传内容后

在这里插入图片描述
看上图,由于我自定义了一个函数,没有实现所以报错了,
提交后内容如下:

提交的数据

在这里插入图片描述

附加信息

view.html中的代码

                        <% if(item.dataType == "file"){ %>
                            <% if(item.url){%>
                                <input type="file" id="<%:=item.name%>" datanum="<%:=item.num%>" onchange="handlerUploadOnlyFile(this)" <% if(item.url){ %>dataurl="<%:=item.url%>" <% } %> datatype="<%:=item.type%>" datasize="<%:=item.size%>" style="display:none" />
                                <input type="text" name="<%:=item.name%>" value="<%:=item.value%>" placeholder="<%:=item.placeholder%>" onclick="$('[id=<%:=item.name%>]').trigger('click');">
                            <%}%>
                            <% if(item.filehandler){%>
                                <input type="file" id="<%:=item.name%>" datanum="<%:=item.num%>" onchange=<%:=item.filehandler%> style="display:none" />
                                <input type="text" name="<%:=item.name%>" value="<%:=item.value%>" placeholder="<%:=item.placeholder%>" onclick="$('[id=<%:=item.name%>]').trigger('click');">
                            <%}%>
                            <span class="spanclean" onclick="handlerClean(this)">x</span>
                        <%}%>

对应的JS

                    case "file":
                        {
                            item.dataType = 'file';
                            if (_attribute.args1) {
                                item.url = _attribute.args1;
                            }
                            if(_attribute.args2){
                                item.type = _attribute.args2;
                            }
                            if (_attribute.args3) {
                                item.filehandler = _attribute.args3;
                            }
                            if (!item.url && !item.filehandler) {
                                item.url = "/api/app/Upload/UpFile";
                            }
                        }
                        break;

点击上传的逻辑

/**
 * 上传非图片 比如文件等
 **/
function handlerUploadOnlyFile(elc) {
    var _url = `${auto_root_path()}/Upload/UpFile`;
    var _dataurl = $(elc).attr('dataurl');
    if (_dataurl) {
        _url = _dataurl;
    }
    var _type = $(elc).attr('datatype');
    if(_type){
        _url=`${_url}${(_url.indexOf("?")>=0?'&':'?')}type=${_type}`;
    }
    var _name = $(elc).attr("id");
    var _num = 1;
    if (elc.files && elc.files.length > _num) {
        layer.msg(`选择的文件过多,至多选择${_num}个文件!`);
    }
    if (elc.files.length > 0) {
        var loadid = layer.load();
        var formData = new FormData();
        for (var k = 0; k < elc.files.length; k++) {
            formData.append(elc.files[k].name, elc.files[k]);
        }
        $.ajax({
            url: _url,
            type: 'post',
            contentType: false,
            processData: false,
            async: true,
            data: formData,
            headers: { "token": readToken() },
            success: function (obj) {
                layer.close(loadid);
                $(elc).parents(".formControls").find(`[name=${_name}]`).val(obj.data[0].url);
                elc.value = null;
            },
            error: function (res) {
                if (loadid != 0) {
                    layer.close(loadid);
                }
                elc.value = null;
                layer.msg(res.statusText, { icon: 'error', time: 3000 });
            }
        });
    } else {
        // layer.msg("请选择至少一个有效的文件!");readmemberToken
    }
}

API的案例

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        [HttpPost]
        public WangEditorUpload UpFile(string type = "file")
        {
            var one = new WangEditorUpload();
            one.errno = 1;
            if (base.Request.Form != null)
            {
                if (base.Request.Form.Files != null)
                {
                    if (base.Request.Form.Files.Count > 0)
                    {
                        one.errno = 0;
                        one.data = new List<WangEditorUploadItem>();
                        for (var k = 0; k < base.Request.Form.Files.Count; k++)
                        {
                            var finput = base.Request.Form.Files[k];
                            //这里还要进行文件后缀的过滤
                            var item = new WangEditorUploadItem();
                            var extension = System.IO.Path.GetExtension(finput.FileName);
                            var filename = $"{finput.FileName}{k}{DateTimeOffset.Now.ToUnixTimeMilliseconds()}".ToMd5Lower();
                            var savepath = $"upload/{type}/{filename}.{extension}";
                            var path = System.IO.Path.GetDirectoryName(savepath);
                            if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); }
                            item.alt = finput.FileName;
                            item.href = $"/{savepath}";
                            item.url = $"/{savepath}";
                            using var image = Image.Load<Rgba32>(finput.OpenReadStream());
                            image.Mutate(x => x.Resize(0, 180));
                            image.Save(savepath);
                            item.url = $"/{savepath}";
                            finput.OpenReadStream().Dispose();
                            item.size = finput.Length;
                            one.data.Add(item);
                        }
                    }
                }
            }
            return one;
        }

更多特性见

贴代码PasteForm专题介绍

我们下期见!

评论列表
尘埃
7 142 0
快捷注册
热门推荐更多
PasteSpider开发部署工具
;
最新动态
  • 120.****.201 正在查看 PasteSpider之--路由列表-私有仓库-环境配置-的介绍 !
  • 61.****.144 正在查看 PasteSpider更新摘要,持续更新 !
  • 201.****.216 正在查看 PasteForm中,表格的不一样的样式的设定? !
  • 170.****.57 正在查看 Redis的安装 !
  • 99.****.129 正在查看 贴代码框架PasteForm特性介绍之mark(标签,书签,字段说明)的支持 !
  • 189.****.205 正在查看 开发者专用Linux容器部署工具PasteSpider(K8S,Jenkins,CICD)介绍 !
  • 167.****.45 正在查看 贴代码框架PasteForm之特性select,lselect,selects的介绍 !
  • 45.****.97 正在查看 PasteSpider之占位符,宏,对象属性遍历的说明 !
  • 121.****.136 正在查看 贴代码框架PasteForm特性介绍之mark(标签,书签,字段说明)的支持 !
  • 113.****.142 正在查看 Serilog在appsettings.json中的配置 !
  • 135.****.15 正在查看 使用PasteSpider实现CI/CD持续部署,类似Jenkins的功能,让你的2G服务器也可以飞起 !
欢迎加入QQ讨论群 296245685 更新记录 [PasteSpider]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2