当前位置: 首页 > news >正文

【.net core】yisha框架imageupload组件多图上传修改

 框架\wwwroot\lib\imageupload\1.0\js路径下imgup.js文件,参照旧版本代码和修改代码修改


(function ($) {"use strict";var deleteParent;var deleteDisplay = 'none';var defaults = {fileType: ["jpg", "png", "bmp", "jpeg", "gif"],   // 上传文件的类型fileSize: 1024 * 1024 * 200                 // 上传文件的大小 10M};$.fn.imageUpload = function (option, param) {if (typeof option == 'string') {return $.fn.imageUpload.methods[option](this, param);}var _option = $.extend({}, $.fn.imageUpload.defaults, option || {});var target = $(this);var id = target.attr("id");var inputFileId = id + "_file";var html = '';html += '<section class="img-section">';html += '    <div class="z_photo upimg-div clear">';html += '       <section class="z_file fl">';if (_option.canAdd == 1) {html += '           <img src="' + _option.context + 'lib/imageupload/1.0/img/add.png" class="add-img">';deleteDisplay = 'block';}/*** 旧版本代码*///html += '           <input type="file" name="' + inputFileId + '" id="' + inputFileId//    + '" class="file-image" callback="' + _option.uploadImage + '" context="'//    + _option.context + '" limit="' + _option.limit//    + '"  value="" accept="image/jpg,image/jpeg,image/png,image/bmp" />';/*** 20231024修改* 为input元素增加multiple属性*/html += '           <input type="file" name="' + inputFileId + '" id="' + inputFileId+ '" class="file-image" callback="' + _option.uploadImage + '" context="'+ _option.context + '" multiple limit="' + _option.limit+ '"  value="" accept="image/jpg,image/jpeg,image/png,image/bmp" />';html += '       </section>';html += '   </div>';html += '</section>';html += '<aside class="mask works-mask">';html += '   <div class="mask-content">';html += '       <div class="del-p">您确定要删除图片吗?</div>';html += '       <div class="check-p"><span class="del-com wsdel-ok">确定</span><span class="wsdel-no">取消</span></div>';html += '   </div>';html += '</aside>';target.append(html);target.find(".wsdel-ok").click(function () {$(".works-mask").hide();var numUp = deleteParent.siblings().length;if (numUp < 6) {deleteParent.parent().find(".z_file").show();}deleteParent.remove();});target.find(".wsdel-no").click(function () {$(".works-mask").hide();});$("#" + inputFileId).change(function () {prepareUploadImage(inputFileId);});};$.fn.imageUpload.defaults = {uploadImage: '',    // 上传图片回调limit: 10,          // 上传限制context: '',        // 当前页面根目录canPreview: 1,      // 是否可以预览(0不可以,1可以)canAdd: 1           // 是否可以添加(0不可以,1可以)};$.fn.imageUpload.methods = {getImageUrl: function (target) {var imageUrl = '';var list = $(target).find('.up-section').find('.up-img');for (var i = 0; i < list.length; i++) {if (i == 0) {imageUrl += $(list[i]).attr("src");} else {imageUrl += ';';imageUrl += $(list[i]).attr("src");}}return imageUrl;},setImageUrl: function (target, imageUrl) {if (imageUrl) {var id = $(target).attr("id");var inputFileId = id + "_file";var context = $("#" + inputFileId).attr("context");var urlArr = imageUrl.split(';');for (var i = 0; i < urlArr.length; i++) {if (urlArr[i] != "") {var deleteId = ys.getGuid();var imageName = urlArr[i].substring(urlArr[i].lastIndexOf('/') + 1);var html = '';html += '<section class="up-section fl">';html += '   <span class="up-span"></span>';html += '   <img id="' + deleteId + '" class="close-upimg" style="display:' + deleteDisplay + '" src="' + context + 'lib/imageupload/1.0/img/delete.png" />';if (urlArr[i].indexOf('http') > -1) {html += '   <img class="up-img" src="' + urlArr[i] + '" />';}else {html += '   <img class="up-img" src="' + context + ys.trimStart(urlArr[i], '/') + '" />';}html += '   <p class="img-name-p">"' + imageName + '"</p>';html += '</section>';$(html).insertBefore($(target).find(".z_file"));$("#" + deleteId).on("click", function () {$("#" + inputFileId).imageUpload("deleteImage", deleteId)});}}$(".up-span").Huipreview();$("#" + inputFileId).imageUpload("checkImageLimit")}},deleteImage: function (target, deleteId) {var _target = $(target);var inputFileId = _target.attr("id");if (!!event) {event.preventDefault();event.stopPropagation();}$(".works-mask").show();deleteParent = $("#" + deleteId).parent();$("#" + inputFileId).imageUpload("checkImageLimit");},checkImageLimit: function (target) {var _target = $(target);var num = _target.parents(".z_photo").find(".up-section").length;var limit = _target.attr("limit");if (num >= limit) {_target.parent().hide();} else {_target.parent().show();}}};function prepareUploadImage(inputFileId) {var target = $("#" + inputFileId);var callback = target.attr("callback");var limit = target.attr("limit");if (!callback || callback == '') {alert("请提供上传方法");return;}var inputFile = document.getElementById(inputFileId);var imgContainer = target.parents(".z_photo"); //存放图片的父亲元素var fileList = inputFile.files; //获取的图片文件//遍历得到的图片文件var num = imgContainer.find(".up-section").length;var totalNum = num + fileList.length;  //总的数量if (fileList.length > limit || totalNum > limit) {alert("上传图片数目不可以超过" + limit + "个,请重新选择");  //一次选择上传超过5个 或者是已经上传和这次上传的到的总数也不可以超过5个}else if (num < limit) {validateUpload(fileList);var uploadSuccess = function (imgPath) {/*** 旧版本代码*///var section = $("<section class='up-section fl loading'>");//imgContainer.prepend(section);//var span = $("<span class='up-span'>");//span.appendTo(section);//var context = $("#" + inputFileId).attr("context");//var deleteId = ys.getGuid();//var deleteImg = $("<img id='" + deleteId + "' class='close-upimg'> style='display:" + deleteDisplay + "'").on("click", function () {//    $("#" + inputFileId).imageUpload("deleteImage", deleteId)//});//deleteImg.attr("src", context + "lib/imageupload/1.0/img/delete.png").appendTo(section);//var realImg = $("<img class='up-img up-opcity'>");//realImg.attr("src", imgPath);//realImg.appendTo(section);//var p = $("<p class='img-name-p'>");//p.html(imgPath.substring(imgPath.lastIndexOf('/') + 1)).appendTo(section);/*** 20231024修改* 增加方法多文件上传功能*/ if (typeof (imgPath) == 'string') {var section = $("<section class='up-section fl loading'>");imgContainer.prepend(section);var span = $("<span class='up-span'>");span.appendTo(section);var context = $("#" + inputFileId).attr("context");var deleteId = ys.getGuid();var deleteImg = $("<img id='" + deleteId + "' class='close-upimg'> style='display:" + deleteDisplay + "'").on("click", function () {$("#" + inputFileId).imageUpload("deleteImage", deleteId)});deleteImg.attr("src", context + "lib/imageupload/1.0/img/delete.png").appendTo(section);var realImg = $("<img class='up-img up-opcity'>");realImg.attr("src", imgPath);realImg.appendTo(section);var p = $("<p class='img-name-p'>");p.html(imgPath.substring(imgPath.lastIndexOf('/') + 1)).appendTo(section);}else {imgPath.forEach(function (item) {var section = $("<section class='up-section fl loading'>");imgContainer.prepend(section);var span = $("<span class='up-span'>");span.appendTo(section);var context = $("#" + inputFileId).attr("context");var deleteId = ys.getGuid();var deleteImg = $("<img id='" + deleteId + "' class='close-upimg'> style='display:" + deleteDisplay + "'").on("click", function () {$("#" + inputFileId).imageUpload("deleteImage", deleteId)});deleteImg.attr("src", context + "lib/imageupload/1.0/img/delete.png").appendTo(section);var realImg = $("<img class='up-img up-opcity'>");realImg.attr("src", item);realImg.appendTo(section);var p = $("<p class='img-name-p'>");p.html(item.substring(item.lastIndexOf('/') + 1)).appendTo(section);})}setTimeout(function () {$(".up-section").removeClass("loading");$(".up-img").removeClass("up-opcity");}, 450);$("#" + inputFileId).imageUpload("checkImageLimit");};/*** 旧版本代码*///var currentFile = fileList[fileList.length - 1];//只返回最后一个文件内容//doCallback(eval(callback), [currentFile, uploadSuccess]);/*** 20231024修改* 将所有的上传内容返回自定义方法*/doCallback(eval(callback), [fileList, uploadSuccess]);}}function validateUpload(files) {var arrFiles = [];//替换的文件数组for (var i = 0, file; file = files[i]; i++) {//获取文件上传的后缀名var newStr = file.name.split("").reverse().join("");if (newStr.split(".")[0] != null) {var type = newStr.split(".")[0].split("").reverse().join("");console.log(type + "===type===");if (jQuery.inArray(type, defaults.fileType) > -1) {// 类型符合,可以上传if (file.size >= defaults.fileSize) {alert(file.size);alert('您这个"' + file.name + '"文件大小过大');} else {// 在这里需要判断当前所有文件中arrFiles.push(file);}} else {alert('您这个"' + file.name + '"上传类型不符合');}} else {alert('您这个"' + file.name + '"没有类型, 无法识别');}}return arrFiles;}// 动态调用方法,并传递参数function doCallback(fn, args) {fn.apply(this, args);}
})(jQuery);

 页面代码,替换原有页面初始化和自定义上传触发方法

//初始化组件方法
$("#thumbImage").imageUpload({ uploadImage: 'uploadThumbImage', limit: 10, context: ctx });//limit参数,设置单次上传和总上传数量function uploadThumbImage(file, callback) {//自定义的上传触发方法var formdata = new FormData();//formdata.append("fileList", file);//file为单文件数据(File类型)console.log('uploadThumbImage', file)for (var i = 0; i < file.length; i++) {//file为多文件数据(FileList类型)formdata.append("fileList", file[i]);//手动给formdata中添加文件流内容}ys.ajaxUploadFile({//url: '@GlobalContext.SystemConfig.ApiSite' + '/File/UploadFile?fileModule=@UploadFileType.News.ParseToInt()',url: '@Url.Content("~/File/uploadImagesProc")' + "?fileModule=@UploadFileType.News.ParseToInt()",data: formdata,success: function (obj) {if (obj.Tag == 1) {if (callback) {//callback('@GlobalContext.SystemConfig.ApiSite' + obj.Data);callback(obj.Data);}}else {ys.msgError(obj.Message);}}})}

后台代码,可直接复制,UploadFileProc方法需在FileHelper类中创建

 /// <summary>/// 单/多文件上传/// </summary>/// <param name="files"></param>/// <returns></returns>[HttpPost]public async Task<TData<object>> uploadImagesProc(int fileModule, IFormFileCollection fileList){TData<object> obj = new TData<object>();obj = await FileHelper.UploadFileProc(fileModule, fileList);return obj;}
#region 上传多个文件/// <summary>/// 上传多个文件/// </summary>/// <param name="fileModule"></param>/// <param name="files">文件流集合</param>/// <returns></returns>public async static Task<TData<object>> UploadFileProc(int fileModule, IFormFileCollection files){string dirModule = string.Empty;TData<object> obj = new TData<object>();if (files == null || files.Count == 0){obj.Message = "请先选择文件!";return obj;}//IFormFile file = files[0];List<object> resultObj = new List<object>();foreach (IFormFile file in files){TData objCheck = null;objCheck = CheckFileExtension(Path.GetExtension(file.FileName), ".jpg|.jpeg|.gif|.png");if (objCheck.Tag != 1){obj.Tag = 0;obj.Message = objCheck.Message;return obj;}switch (fileModule){case (int)UploadFileType.Portrait:objCheck = CheckFileExtension(Path.GetExtension(file.FileName), ".jpg|.jpeg|.gif|.png");if (objCheck.Tag != 1){obj.Message = objCheck.Message;return obj;}dirModule = UploadFileType.Portrait.ToString();break;case (int)UploadFileType.News:if (file.Length > 5 * 1024 * 1024) // 5MB{obj.Message = "文件最大限制为 5MB";return obj;}objCheck = CheckFileExtension(Path.GetExtension(file.FileName), ".jpg|.jpeg|.gif|.png");if (objCheck.Tag != 1){obj.Message = objCheck.Message;return obj;}dirModule = UploadFileType.News.ToString();break;case (int)UploadFileType.Import:objCheck = CheckFileExtension(Path.GetExtension(file.FileName), ".xls|.xlsx");if (objCheck.Tag != 1){obj.Message = objCheck.Message;return obj;}dirModule = UploadFileType.Import.ToString();break;default:obj.Message = "请指定上传到的模块";return obj;}string fileExtension = TextHelper.GetCustomValue(Path.GetExtension(file.FileName), ".png");string newFileName = SecurityHelper.GetGuid() + fileExtension;string dir = "Resource" + Path.DirectorySeparatorChar + dirModule + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd").Replace('-', Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;string absoluteDir = Path.Combine(GlobalContext.HostingEnvironment.ContentRootPath, dir);string absoluteFileName = string.Empty;if (!Directory.Exists(absoluteDir)){Directory.CreateDirectory(absoluteDir);}absoluteFileName = absoluteDir + newFileName;try{using (FileStream fs = System.IO.File.Create(absoluteFileName)){await file.CopyToAsync(fs);fs.Flush();}resultObj.Add(Path.AltDirectorySeparatorChar + ConvertDirectoryToHttp(dir) + newFileName);//obj.Data = ;//obj.Message = Path.GetFileNameWithoutExtension(TextHelper.GetCustomValue(file.FileName, newFileName));//obj.Description = (file.Length / 1024).ToString(); // KB//obj.Tag = 1;}catch (Exception ex){obj.Tag = 0;obj.Message = ex.Message;}}if (resultObj.Count > 0){obj.Tag = 1;obj.Message = "上传成功";obj.Data = resultObj;}return obj;}#endregionpublic static string ConvertDirectoryToHttp(string directory){directory = directory.ParseToString();directory = directory.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);return directory;}public static TData CheckFileExtension(string fileExtension, string allowExtension){TData obj = new TData();string[] allowArr = TextHelper.SplitToArray<string>(allowExtension.ToLower(), '|');if (allowArr.Where(p => p.Trim() == fileExtension.ParseToString().ToLower()).Any()){obj.Tag = 1;}else{obj.Message = "只有文件扩展名是 " + allowExtension + " 的文件才能上传";}return obj;}public class TextHelper{/// <summary>/// 获取默认值/// </summary>/// <param name="value"></param>/// <param name="defaultValue"></param>/// <returns></returns>public static string GetCustomValue(string value, string defaultValue){if (string.IsNullOrEmpty(value)){return defaultValue;}else{return value;}}/// <summary>/// 截取指定长度的字符串/// </summary>/// <param name="value"></param>/// <param name="length"></param>/// <returns></returns>public static string GetSubString(string value, int length, bool ellipsis = false){if (string.IsNullOrEmpty(value)){return value;}if (value.Length > length){value = value.Substring(0, length);if (ellipsis){value += "...";}}return value;}/// <summary>/// 字符串转指定类型数组/// </summary>/// <param name="value"></param>/// <param name="split"></param>/// <returns></returns>public static T[] SplitToArray<T>(string value, char split){T[] arr = value.Split(new string[] { split.ToString() }, StringSplitOptions.RemoveEmptyEntries).CastSuper<T>().ToArray();return arr;}}

 

相关文章:

【.net core】yisha框架imageupload组件多图上传修改

框架\wwwroot\lib\imageupload\1.0\js路径下imgup.js文件&#xff0c;参照旧版本代码和修改代码修改 (function ($) {"use strict";var deleteParent;var deleteDisplay none;var defaults {fileType: ["jpg", "png", "bmp", "…...

vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格

背景描述&#xff1a; 我在使用VSCode&#xff0c;这玩意很好用&#xff0c;但是&#xff0c;有一个缺点是&#xff0c;我想使用Tab来做一些对齐&#xff0c;但是我发现在VSCode中&#xff0c;无论是Tab还是多个空格&#xff0c;最终显示出来的都是一个空格 使用代码可以实现打…...

I/O 模型学习笔记【全面理解BIO/NIO/AIO】

文章目录 I/O 模型什么是 I/O 模型Java支持3种I/O模型BIO&#xff08;Blocking I/O&#xff09;NIO&#xff08;Non-blocking I/O&#xff09;AIO&#xff08;Asynchronous I/O&#xff09; BIO、NIO、AIO适用场景分析 java BIOJava BIO 基本介绍Java BIO 编程流程一个栗子实现…...

【Python学习笔记】字符编码

1. 字符串编码 Python3语言里面的字符串对象是unicode字符串&#xff0c;在内存中实际存储时&#xff0c;使用的是 UTF16 编码。但通常不会将UTF16编码的内容写到磁盘或者在网络进行传输&#xff0c; 因为utf16编码比较浪费空间。特别是如果文字信息基本都是英文符号的情况下&…...

华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…...

Git 拉取远程更新报错

报错内容如下&#xff1a; cannot lock ref refs/remotes/origin/bugfix/bug: refs/remotes/origin/bugfix 已存在&#xff0c;无法创建 refs/remotes/origin/bugfix/bug 来自 gitlab.zhangyue-inc.com:dejian_ios/iReaderDejian! [新分支] bugfix/bug -> ori…...

腾讯云国际站服务器端口开放失败怎么办?

腾讯云服务器是腾讯公司推出的一种云服务&#xff0c;用户能够经过这种方式在互联网上进行数据存储和计算。然而&#xff0c;用户在运用腾讯云服务器时或许会遇到各种问题&#xff0c;其间端口敞开失利是一个常见问题。本文将具体介绍如何解决腾讯云服务器端口敞开失利的问题。…...

一句话解释什么是出口IP

出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 IP 地…...

深入理解强化学习——强化学习的历史:试错学习

分类目录&#xff1a;《深入理解强化学习》总目录 让我们现在回到另一条通向现代强化学习领域的主线上&#xff0c;它的核心则是试错学习思想。我们在这里只对要点做概述&#xff0c;《深入理解强化学习》系列后面的文章会更详细地讨论这个主题。根据美国心理学家R.S.woodworth…...

分享一个用HTML、CSS和jQuery构建的漂亮的登录注册界面

作为一个前端开发人员&#xff0c;我们经常需要构建用户的登录和注册界面。一个漂亮、用户友好的登录注册界面对于提升用户体验和网站形象至关重要。以下我们使用HTML、CSS和jQuery来做一个漂亮的登录注册界面。 首先&#xff0c;我们需要创建一个html文档&#xff0c;定义登录…...

Java学习 习题 1.

一、 1.2. 3. 4. 5. 二、 1. 2. 3. 4. 5. 6. 7. 8....

第六节——Vue中的事件

一、定义事件 Vue 元素的事件处理和 DOM 元素的很相似&#xff0c;但是有一点语法上的不同 使用修饰符&#xff08;v-on:的缩写&#xff09;事件名的方式 给dom添加事件后面跟方法名&#xff0c;方法名可以直接加括号如click"add()"里面进行传参。对应的事件处理函…...

设置GridView单选

/// <summary> /// 设置GridView单选 /// </summary> /// <param name"view"></param> /// <param name"selectCaption"></param> public static void SetGridViewSingleSel…...

[Python从零到壹] 七十二.图像识别及经典案例篇之OpenGL入门及绘制基本图形和3D图

十月太忙,还是写一篇吧!祝大家1024节日快乐O(∩_∩)O 欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希…...

论文-分布式-并发控制-Lamport逻辑时钟

目录 前言 逻辑时钟讲解 算法类比为面包店内取号 Lamport算法的时间戳原理 Lamport算法的5个原则 举例说明 算法实现 参考文献 前言 在并发系统中&#xff0c;同步与互斥是实现资源共享的关键Lamport面包店算法作为一种经典的解决并发问题的算法&#xff0c;它的实现原…...

长三角实现区块链电子医疗票据互联互通,蚂蚁链提供技术支持

10月25日&#xff0c;记者从浙江省财政厅发布的消息获悉&#xff0c;上海、浙江、江苏和安徽三省一市基于蚂蚁链实现区块链电子医疗票据互联互通&#xff0c;商业保险理赔作为首个规模化应用场景正式落地&#xff0c;蚂蚁保“安心赔”理赔服务率先接入。 今后&#xff0c;老百…...

Redis快速上手篇(三)(事务+Idea的连接和使用)

Redis事务 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的 所有命令都会序列化&#xff0c;按顺序地串行化执行而不会被其它命令插入&#xff0c;不许加塞。 单独的隔离的操作 官网说明 https://redis.io/docs/interact/transactions/ MULTI、EXEC、…...

Spring三级缓存解决循环依赖问题

文章目录 1. 三级缓存解决的问题场景2. 三级缓存的差异性3. 循环依赖时的处理流程4. 源码验证 1. 三级缓存解决的问题场景 循环依赖指的是在对象之间存在相互依赖关系&#xff0c;形成一个闭环&#xff0c;导致无法准确地完成对象的创建和初始化&#xff1b;当两个或多个对象彼…...

Unity 中使用波浪动画创建 UI 图像

如何使用 只需将此组件添加到画布中的空对象即可。强烈建议您将此对象放入其自己的画布/嵌套画布中&#xff0c;因为它会弄脏每一帧的画布并导致重新生成整个网格。 注意&#xff1a;不支持切片图像。 using System.Collections.Generic; using UnityEngine; using UnityEng…...

支付功能测试用例测试点?

支付功能测试用例测试点是指在测试支付功能时&#xff0c;需要关注和验证的各个方面。根据不同的支付场景和需求&#xff0c;支付功能测试用例测试点可能有所不同&#xff0c;但一般可以分为以下几类&#xff1a; 功能测试&#xff1a;主要检查支付功能是否符合设计和业务需求…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...