贴代码框架PasteForm特性介绍之file
简介
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%>" οnchange=<%:=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专题介绍
我们下期见!
相关文章:

贴代码框架PasteForm特性介绍之file
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...

2024年 数模美赛 B题 潜水艇
摘要 随着深海探险活动的增加,确保潜水器及其乘客的安全成为一项重要任务。本文旨在为Maritime Cruises Mini-Submarines (MCMS)公司开发一套模型,用于预测潜水艇在发生故障时的位置,并制定有效的搜救策略。本文将详细讨论模型的开发、不确定…...

ChatGPT 与其他 AI 技术在短视频营销中的技术应用与协同策略
摘要: 本文深入探讨了 ChatGPT 及其他 AI 技术在短视频营销中的应用。从技术层面剖析了这些技术如何助力短视频内容创作、个性化推荐、用户互动以及营销效果评估等多方面,通过具体方法分析、数据引用与大模型工具介绍,旨在为短视频营销领域提…...

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因
随着人工智能和机器学习技术的应用,流媒体播放器将变得更加智能,能够根据用户行为和偏好提供个性化的内容推荐。总体而言,流媒体播放器的未来发展将更加注重技术创新和用户互动,以适应不断变化的市场需求和技术进步。 提示MSE不支…...

电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程
在日常使用电脑的过程中,有时我们需要让电脑在特定的时间自动关机,比如在下载大文件完成后、执行长时间的任务结束时,或者只是单纯想在某个预定时间让电脑自动关闭以节省能源。这时候,Wise Auto Shutdown 这款软件就能派上大用场了…...

笔记mfc11
Subclass(子类化)是MFC中最常用的窗体技术之一。子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类)。另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息。 让edit能…...

【探寻密码的奥秘】-001:解开密码的神秘面纱
目录 1、密码学概述1.1、概念1.2、目的1.3、应用场景 2、密码学的历史2.1、第一时期:古代密码时代2.2、第二时期:机械密码时代2.3、第三时期:信息密码时代2.4、第四时期:现代密码时代 3、密码学的基本概念3.1、一般通信系统3.2、保…...

ElasticSearch7.x入门教程之集群安装(一)
文章目录 前言一、es7.x版本集群安装二、elasticsearch-head安装三、Kibana安装总结 前言 在工作中遇到了,便在此记录一下,以防后面会再次遇到。第一次使用是在2020年末,过了很久了,忘了些许部分了。 在工作当中,如果…...

c++ 笔记
基础知识 1. 指针、引用2. 数组3. 缺省参数4. 函数重载5. 内联函数6. 宏7. auto8. const9. 类和对象10. 类的6个默认成员函数11. 初始化列表12. this指针13. C/C的区别14. C 三大特性15. 结构体内存对齐规则16. explicit17. static18. 友元类、友元函数19. 内部类20. 内存管理&…...

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图
欢迎来到《小5讲堂》 这是《腾讯云》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…...

10 —— Webpack打包模式
开发模式:development ;场景:本地开发 生产模式:production ; 场景:打包上线 设置: 方式1.webpack.config.js 配置文件设置mode选项 module.exports { mode:production }; 方式2.在packa…...

【ArcGIS微课1000例】0132:从多个GIS视角认识与攀登珠穆朗玛峰
文章目录 1. Map Viewer中打开2. 场景查看器中打开3. ArcGIS中打开4. QGIS中打开5. Globalmapper中打开6. ArcGIS Earth中打开官网地址:https://www.arcgis.com/home/item.html?id=504a23373ab84536b7760c0add1e0c1c 1. Map Viewer中打开 以下展示不同底图样式的珠穆朗玛峰壮…...

vue2 - 20.json-server
json-server 目标:基于 json-server 工具,准备后端接口服务环境 1. 安装全局工具 json-server (全局工具仅需要安装一次)【官网】 yarn global add json-server 或 npm i json-server -g yarn global add json-server npm i …...

echarts4r 教程1:Get Started
❝ 写在前面 本文为 R 语言 echarts4r 包的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。软件可能随时更新,建议配合官方文档一起阅读。 目录 1 Video & Article 2 Your first plot 3 Options 4 Navigate…...

蚁群算法(Ant Colony Optimization, ACO)
简介 蚁群算法(Ant Colony Optimization, ACO)是一种基于自然启发的优化算法,由意大利学者马可多里戈(Marco Dorigo)在1992年首次提出。它受自然界中蚂蚁觅食行为的启发,用于解决离散优化问题。 在自然界…...

使用IDEA构建springboot项目+整合Mybatis
目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单,springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器,其默认嵌入的容器是 Tomcat,…...

苹果系统中利用活动监视器来终止进程
前言 苹果系统使用的时候总是感觉不太顺手。特别是转圈的彩虹球出现的时候,就非常令人恼火。如何找到一个像Windows那样任务管理器来终止掉进程呢? 解决办法 Commandspace 弹出搜索框吗,如下图: 输入“活动”进行搜索ÿ…...

宝塔安装雷池网站防护
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 加载镜像二、使用步骤三、如果启动不成三、 启动成功以后三、 进入雷池不知道密码 前言 提示:这里可以添加本文要记录的大概内容:…...

JavaScript完整原型链
在 JavaScript 中,每个函数都有一个prototype属性,这个属性是一个对象。当通过一个构造函数创建一个新的对象时,这个新对象会自动拥有一个内部属性[[Prototype]](在一些浏览器中可以通过__proto__访问,不过这是一个非标…...

Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现
LRU(Least Recently Used,最近最少使用)是通过记录缓存项的访问顺序来决定淘汰的策略:当缓存满时,移除最久未被使用的项。 核心概念: 缓存存储:使用 Map 存储键值对,用于快速访问缓…...

李宏毅机器学习课程知识点摘要(14-18集)
线性回归,逻辑回归(线性回归sigmoid),神经网络 linear regression , logistic regression , neutral network 里面的偏导的相量有几百万维,这就是neutral network的不同,他是…...

《AI大模型开发笔记》Faster-Whisper 免费开源的高性能语音识别模型
1 Whisper模型,免费开源的语音识别模型 Whisper模型是OpenAI公开的语音识别模型。这是一个免费可商用的模型。 Whisper模型根据参数量来区分,有多个不同的版本,分别是tiny,base,small medium,large&#x…...

蓝队基础,网络七杀伤链详解
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...

golang开发一个海盗王的登录更新器
前段时间,用golang配合界面库govcl开发一个海盗王的登陆更新器,实现多区注册和文件更新分离不同服务器等新功能。 由于govcl没有更换皮肤的功能,界面都是默认,不好看。 找了很多go语言的gui库,都没有符合要求的。 后来…...

李宏毅机器学习课程知识点摘要(6-13集)
pytorch简单的语法和结构 dataset就是数据集,dataloader就是分装好一堆一堆的 他们都是torch.utils.data里面常用的函数,已经封装好了 下面的步骤是把数据集读进来 这里是读进来之后,进行处理 声音信号,黑白照片,红…...

003 STM32基础、架构以及资料介绍——常识
注: 本笔记参考学习B站官方视频教程,免费公开交流,切莫商用。内容可能有误,具体以官方为准,也欢迎大家指出问题所在。 01什么是STM32(宏观) STM32属于一个微控制器,自带了各种常用通…...

【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化
【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化 目录 文章目录 【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数:★★★★☆ …...

开源可视化工具对比:JimuReport VS DataEase
在当今数据驱动的时代,高效的数据可视化工具成为企业洞察业务、做出决策的关键利器。那对于企业来讲如何选择BI产品呢? 在开源可视化工具的领域中,JimuReport和DataEase 以其独特的优势脱颖而出,究竟谁更胜一筹呢?让我…...

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究
复杂场景下水下图像增强技术的研究 对于海洋勘探来说,清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而,在复杂的水下环境中,由于光在水中传播过程中的吸收、散射等现象,导致图像质量下降,导致模糊、…...

shell与QQ邮箱的连接
1.下载软件:yum install s-nail 2.配置文件:vim /etc/s-nail.rc 末尾添加此三行,加入QQ邮箱和验证码 3.验证码位于QQ邮箱安全管理内,进行复制粘贴 4.测试发消息给本地邮箱:echo "要发送的内容" | mail …...