CFUpdate上传控件的使用

一同事找的这个控件,觉得挺不错的,到官方(http://www.access2008.cn/)下载源码后稍加修改

html页面代码:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_cn" lang="zh_cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>多文件上传组件</title>
</head>
<body bgcolor="#ffffff" style="text-align:center;"><!--影片中使用的 URL--><!--影片中使用的文本--><!-- saved from url=(0013)about:internet --><script language="javascript">
function challs_flash_update(){ //Flash 初始化函数var a={};//定义变量为Object 类型
a.title = "上传文件"; //设置组件头部名称
    a.FormName = "Filedata";//设置Form表单的文本域的Name属性
a.url = "ImgHandler.aspx"; //设置服务器接收代码文件
    a.parameter = ""; //设置提交参数,以GET形式提交,例:"key=value&key=value&..."
    a.typefile = ["Images (*.gif,*.png,*.jpg,*jpeg)","*.gif;*.png;*.jpg;*.jpeg;","GIF (*.gif)","*.gif;","PNG (*.png)","*.png;","JPEG (*.jpg,*.jpeg)","*.jpg;*.jpeg;"];//这里设置其他类型的文件//a.typefile = ["File (*.rar,*.doc,*.zip,*.txt,*.docx,*.swf,*.html,*.htm)", "*.rar;*.doc;*.zip;*.txt;*.docx;*.swf;*.html;*.htm"];//设置可以上传文件 数组类型//"Images (*.gif,*.png,*.jpg)"为用户选择要上载的文件时可以看到的描述字符串,//"*.gif;*.png;*.jpg"为文件扩展名列表,其中列出用户选择要上载的文件时可以看到的 Windows 文件格式,以分号相隔//2个为一组,可以设置多组文件类型
    a.newTypeFile = ["Images (*.gif,*.png,*.jpg,*jpeg)","*.gif;*.png;*.jpg;*.jpeg;","JPE;JPEG;JPG;GIF;PNG","GIF (*.gif)","*.gif;","GIF","PNG (*.png)","*.png;","PNG","JPEG (*.jpg,*.jpeg)","*.jpg;*.jpeg;","JPE;JPEG;JPG"];//设置可以上传文件,多了一个苹果电脑文件类型过滤 数组类型, 设置了此项,typefile将无效//"Images (*.gif,*.png,*.jpg)"为用户选择要上载的文件时可以看到的描述字符串,//"*.gif;*.png;*.jpg"为文件扩展名列表,其中列出用户选择要上载的文件时可以看到的 Windows 文件格式,以分号相隔//"JPE;JPEG;JPG;GIF;PNG" 分号分隔的 Macintosh 文件类型列表,如下面的字符串所示:"JPEG;jp2_;GI
    a.UpSize = 0;//可限制传输文件总容量,0或负数为不限制,单位MB
    a.fileNum = 10;//可限制待传文件的数量,0或负数为不限制
    a.size = 1;//上传单个文件限制大小,单位MB,可以填写小数类型//a.FormID = ['select','select2'];//设置每次上传时将注册了ID的表单数据以POST形式发送到服务器//需要设置的FORM表单中checkbox,text,textarea,radio,select项目的ID值,radio组只需要一个设置ID即可//参数为数组类型,注意使用此参数必须有 challs_flash_FormData() 函数支持
    a.autoClose = 1;//上传完成条目,将自动删除已完成的条目,值为延迟时间,以秒为单位,当值为 -1 时不会自动关闭,注意:当参数CompleteClose为false时无效
    a.CompleteClose = true;//设置为true时,上传完成的条目,将也可以取消删除条目,这样参数 UpSize 将失效, 默认为false
    a.repeatFile = true;//设置为true时,可以过滤用户已经选择的重复文件,否则可以让用户多次选择上传同一个文件,默认为false
    a.returnServer = true;//设置为true时,组件必须等到服务器有反馈值了才会进行下一个步骤,否则不会等待服务器返回值,直接进行下一步骤,默认为false
    a.MD5File = 0;//设置MD5文件签名模式,参数如下 ,注意:FLASH无法计算超过100M的文件,在无特殊需要时,请设置为0//0为关闭MD5计算签名//1为直接计算MD5签名后上传//2为计算签名,将签名提交服务器验证,在根据服务器反馈来执行上传或不上传//3为先提交文件基本信息,根据服务器反馈,执行MD5签名计算或直接上传,如果是要进行MD5计算,计算后,提交计算结果,在根据服务器反馈,来执行是否上传或不上传
    a.loadFileOrder=true;//选择的文件加载文件列表顺序,TRUE = 正序加载,FALSE = 倒序加载
    a.mixFileNum=0;//至少选择的文件数量,设置这个将限制文件列表最少正常数量(包括等待上传和已经上传)为设置的数量,才能点击上传,0为不限制
    a.ListShowType = 2;//文件列表显示类型:1 = 传统列表显示,2 = 缩略图列表显示(适用于图片专用上传)
    a.InfoDownRight = "";//右下角统计信息的文本设置,文本中的 %1% = 等待上传数量的替换符号,%2% = 已经上传数量的替换符号,例子“等待上传:%1%个  已上传:%2%个”
    a.TitleSwitch = true;//是否显示组件头部
    a.ForceFileNum = 0;//强制条目数量,已上传和待上传条目相加等于为设置的值(不包括上传失败的条目),否则不让上传, 0为不限制,设置限制后mixFileNum,autoClose和fileNum属性将无效!
    a.autoUpload = false;//设置为true时,用户选择文件后,直接开始上传,无需点击上传,默认为false;
    a.adjustOrder = true;//设置为true时,用户可以拖动列表,重新排列位置
    a.deleteAllShow = true//设置是否显示,全部清除按钮
     a.language = 0; //语言包控制,0 自动检测 1 简体中文,2 繁体中文 3 英文
    a.countData = true;//是否向服务器端提交组件文件列表统计信息,POST方式提交数据//access2008_box_info_max 列表总数量//access2008_box_info_upload 剩余数量 (包括当前上传条目)//access2008_box_info_over 已经上传完成数量 (不包括当前上传条目)
    a.isShowUploadButton = true;//是否显示上传按钮,默认为truereturn a ;//返回Object
}function challs_flash_onComplete(a){ //每次上传完成调用的函数,并传入一个Object类型变量,包括刚上传文件的大小,名称,上传所用时间,文件类型var name=a.fileName; //获取上传文件名var size=a.fileSize; //获取上传文件大小,单位字节var time=a.updateTime; //获取上传所用时间 单位毫秒var type=a.fileType; //获取文件类型,在 Windows 上,此属性是文件扩展名。 在 Macintosh 上,此属性是由四个字符组成的文件类型//document.getElementById('show').innerHTML+=name+' --- '+size+'字节 ----文件类型:'+type+'--- 用时 '+(time/1000)+'秒<br><br>'
}function challs_flash_onCompleteData(a){ //获取服务器反馈信息事件//document.getElementById('show').innerHTML+='<font color="#ff0000">服务器端反馈信息:</font><br />'+a+'<br />';    
}
function challs_flash_onStart(a){ //开始一个新的文件上传时事件,并传入一个Object类型变量,包括刚上传文件的大小,名称,类型var name=a.fileName; //获取上传文件名var size=a.fileSize; //获取上传文件大小,单位字节var type=a.fileType; //获取文件类型,在 Windows 上,此属性是文件扩展名。 在 Macintosh 上,此属性是由四个字符组成的文件类型//document.getElementById('show').innerHTML+=name+'开始上传!<br />';return true; //返回 false 时,组件将会停止上传
}function challs_flash_onStatistics(a){ //当组件文件数量或状态改变时得到数量统计,参数 a 对象类型var uploadFile = a.uploadFile; //等待上传数量var overFile = a.overFile; //已经上传数量var errFile = a.errFile; //上传错误数量
}function challs_flash_alert(a){ //当提示时,会将提示信息传入函数,参数 a 字符串类型//document.getElementById('show').innerHTML+='<font color="#ff0000">组件提示:</font>'+a+'<br />';
}function challs_flash_onCompleteAll(a){ //上传文件列表全部上传完毕事件,参数 a 数值类型,返回上传失败的数量
    document.getElementById('show').innerHTML+='<font color="#ff0000">所有文件上传完毕,</font>上传失败'+a+'个!<br />';//window.location.href = 'http://www.baidu.com'; //传输完成后,跳转页面
}function challs_flash_onSelectFile(a){ //用户选择文件完毕触发事件,参数 a 数值类型,返回等待上传文件数量//document.getElementById('show').innerHTML+='<font color="#ff0000">文件选择完成:</font>等待上传文件'+a+'个!<br />';
}function challs_flash_deleteAllFiles(){ //清空按钮点击时,出发事件//返回 true 清空,false 不清空return confirm("你确定要清空列表吗?");
}function challs_flash_onError(a){ //上传文件发生错误事件,并传入一个Object类型变量,包括错误文件的大小,名称,类型var err=a.textErr; //错误信息var name=a.fileName; //获取上传文件名var size=a.fileSize; //获取上传文件大小,单位字节var type=a.fileType; //获取文件类型,在 Windows 上,此属性是文件扩展名。 在 Macintosh 上,此属性是由四个字符组成的文件类型
    document.getElementById('show').innerHTML+='<font color="#ff0000">'+name+' - '+err+'</font><br />';
}function challs_flash_FormData(a){ // 使用FormID参数时必要函数try{var value = '';var id=document.getElementById(a);if(id.type == 'radio'){var name = document.getElementsByName(id.name);for(var i = 0;i<name.length;i++){if(name[i].checked){value = name[i].value;}}}else if(id.type == 'checkbox'){var name = document.getElementsByName(id.name);for(var i = 0;i<name.length;i++){if(name[i].checked){if(i>0) value+=",";value += name[i].value;}}}else if(id.type == 'select-multiple'){for(var i=0;i<id.length;i++){if(id.options[i].selected){if(i>0) value+=",";values += id.options[i].value; }}}else{value = id.value;}return value;}catch(e){return '';}
}function challs_flash_style(){ //组件颜色样式设置函数var a = {};/*  整体背景颜色样式 */a.backgroundColor=['#f6f6f6','#f3f8fd','#dbe5f1'];    //颜色设置,3个颜色之间过度
    a.backgroundLineColor='#5576b8';                    //组件外边框线颜色
    a.backgroundFontColor='#066AD1';                    //组件最下面的文字颜色
    a.backgroundInsideColor='#FFFFFF';                    //组件内框背景颜色
    a.backgroundInsideLineColor=['#e5edf5','#34629e'];    //组件内框线颜色,2个颜色之间过度
    a.upBackgroundColor='#ffffff';                        //上翻按钮背景颜色设置
    a.upOutColor='#000000';                                //上翻按钮箭头鼠标离开时颜色设置
    a.upOverColor='#FF0000';                            //上翻按钮箭头鼠标移动上去颜色设置
    a.downBackgroundColor='#ffffff';                    //下翻按钮背景颜色设置
    a.downOutColor='#000000';                            //下翻按钮箭头鼠标离开时颜色设置
    a.downOverColor='#FF0000';                            //下翻按钮箭头鼠标移动上去时颜色设置/*  头部颜色样式 */a.Top_backgroundColor=['#e0eaf4','#bcd1ea'];         //颜色设置,数组类型,2个颜色之间过度
    a.Top_fontColor='#245891';                            //头部文字颜色/*  按钮颜色样式 */a.button_overColor=['#FBDAB5','#f3840d'];            //鼠标移上去时的背景颜色,2个颜色之间过度
    a.button_overLineColor='#e77702';                    //鼠标移上去时的边框颜色
    a.button_overFontColor='#ffffff';                    //鼠标移上去时的文字颜色
    a.button_outColor=['#ffffff','#dde8fe'];             //鼠标离开时的背景颜色,2个颜色之间过度
    a.button_outLineColor='#91bdef';                    //鼠标离开时的边框颜色
    a.button_outFontColor='#245891';                    //鼠标离开时的文字颜色/* 文件列表样式 */a.List_scrollBarColor="#000000"                        //列表滚动条颜色
    a.List_backgroundColor='#EAF0F8';                    //列表背景色
    a.List_fontColor='#333333';                            //列表文字颜色
    a.List_LineColor='#B3CDF1';                            //列表分割线颜色
    a.List_cancelOverFontColor='#ff0000';                //列表取消文字移上去时颜色
    a.List_cancelOutFontColor='#D76500';                //列表取消文字离开时颜色
    a.List_progressBarLineColor='#B3CDF1';                //进度条边框线颜色
    a.List_progressBarBackgroundColor='#D8E6F7';        //进度条背景颜色    
    a.List_progressBarColor=['#FFCC00','#FFFF00'];        //进度条进度颜色,2个颜色之间过度/* 错误提示框样式 */a.Err_backgroundColor='#C0D3EB';                    //提示框背景色
    a.Err_fontColor='#245891';                            //提示框文字颜色
    a.Err_shadowColor='#000000';                        //提示框阴影颜色return a;
}var isMSIE = (navigator.appName == "Microsoft Internet Explorer");   
function thisMovie(movieName){   if(isMSIE){   return window[movieName];   }else{return document[movieName];   }   
}
</script>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="500" height="400" id="update" align="middle">
<param name="allowFullScreen" value="false" /><param name="allowScriptAccess" value="always" /><param name="movie" value="update.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="update.swf" quality="high" bgcolor="#ffffff" width="500" height="400" name="update" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>
<div id="show" style="margin-top:20px; width:500px; text-align:left;"></div>
</body>
</html>


处理文件的aspx页面:

 

protected void Page_Load(object sender, EventArgs e){//---------------------------------------------------------------------------------------------//组件设置a.MD5File为2,3时 的实例代码if (Request.QueryString["access2008_cmd"] != null && Request.QueryString["access2008_cmd"] == "2")//服务器提交MD5验证后的文件信息进行验证
            {//  Request.QueryString["access2008_File_name"];    //文件名//  Request.QueryString["access2008_File_size"];    //文件大小,单位字节//  Request.QueryString["access2008_File_type"];    //文件类型 例如.gif .png//  Request.QueryString["access2008_File_md5"];     //文件的MD5签名
Response.Write("0");//返回命令  0 = 开始上传文件, 2 = 不上传文件,前台直接显示上传完成
                Response.End();}else if (Request.QueryString["access2008_cmd"] != null && Request.QueryString["access2008_cmd"] == "3") //服务器提交文件信息进行验证
            {//  Request.QueryString["access2008_File_name"];    //文件名//  Request.QueryString["access2008_File_size"];    //文件大小,单位字节//  Request.QueryString["access2008_File_type"];    //文件类型 例如.gif .png
Response.Write("1");//返回命令 0 = 开始上传文件,1 = 提交MD5验证后的文件信息进行验证, 2 = 不上传文件,前台直接显示上传完成
                Response.End();}//---------------------------------------------------------------------------------------------if (Request.Files["Filedata"] != null)//判断是否有文件上传上来
            {SaveImages("File/");//其他表单数据接收if (Request.QueryString["access2008_File_md5"] != null){Response.Write("<br/>");Response.Write("MD5效验" + Request.QueryString["access2008_File_md5"]);}Response.Write("<br/>");Response.Write("你选择的是<font color='#ff0000'>" + Request.Form["select"] + "</font>--<font color='#0000ff'>" + Request.Form["select2"] + "</font>");Response.End();}}#region 保存方法/// <summary>/// 保存文件/// </summary>/// <param name="url">保存路径,填写相对路径</param>/// <returns></returns>private void SaveImages(string url){///'遍历File表单元素HttpFileCollection files = HttpContext.Current.Request.Files;///'检查文件扩展名字//HttpPostedFile postedFile = files[iFile];HttpPostedFile postedFile = Request.Files["Filedata"]; //得到要上传文件string fileName, fileExtension, filesize;fileName = System.IO.Path.GetFileName(postedFile.FileName.ToString()); //得到文件名filesize = System.IO.Path.GetFileName(postedFile.ContentLength.ToString()); //得到文件大小if (fileName != ""){fileExtension = System.IO.Path.GetExtension(fileName);//'获取扩展名string NewsName = "File_" + DateTime.Now.ToString("yyyyMMddHHmmss");fileName = NewsName + fileExtension;//注意:可能要修改你的文件夹的匿名写入权限。postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath(url) + fileName);}Response.Write(fileName + "上传成功");}#endregion


需要注意的是update.swf显示页处理页需要在同一级目录下,否则会报Error #2038错误

其中的MD5,他们说:每个文件的MD5签名都是唯一的,在上传文件比较多时,可以不用上传到服务器,直接检测服务器是否有这个文件,直接完成,只做一个标记,建议关闭。

源代码外链地址:http://sdrv.ms/Uf2RVg

转载于:https://www.cnblogs.com/New-world/archive/2012/11/06/2756982.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

observable_Java Observable addObserver()方法与示例

observable可观察的类addObserver()方法 (Observable Class addObserver() method) addObserver() method is available in java.util package. addObserver()方法在java.util包中可用。 addObserver() method is used to insert the given observer (obs) to the bundles of o…

AAC ADTS格式分析

AAC ADTS格式分析&#xff1a; 没有详细的参数说明&#xff0c;只有格式分析。可以查询文档查看详细参数说明。 ADTS的全称是Audio Data Transport Stream。是AAC音频的传输流格 式。AAC音频格式在MPEG-2&#xff08;ISO-13318-7 2003&#xff09;中有定义。AAC后来 又被采用到…

新知道的几个东西

nginx&#xff08;发音同engine x&#xff09;是一款由俄罗斯程序设计师Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。起初是供俄国大型的入口网站及搜寻引擎Rambler&#xff08;俄文&#xff1a;Рамбл…

台达plc控制伺服电机编程实例_PLC控制伺服电机:控制脉冲的相关计算

伺服电机PLC通过脉冲的方式控制伺服电机时&#xff0c;其输出脉冲与伺服电机的配置应具有一定的对应关系。如&#xff0c;PLC输出多少个脉冲电机旋转一圈&#xff1f;电机旋转一圈移动的距离(或角度)是多少&#xff1f;这里我们以某伺服电机为例进行举例说明&#xff1a;完成对…

linux rm命令详解

用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录&#xff0c;它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件&#xff0c;只是断开了链接&#xff0c;原文件保持不变。 rm命令的一般形式为&#xff1a;rm [选项] 文件…

rotateright_Java Long类rotateRight()方法的示例

rotateright长类rotateRight()方法 (Long class rotateRight() method) rotateRight() method is available in java.lang package. rotationRight()方法在java.lang包中可用。 rotateRight() method is used to returns the value generated by rotating the binary 2’s comp…

实验四 Windows程序设计

1&#xff0c;创建Windows窗体应用程序&#xff0c;实现用户登录功能&#xff0c;当输入正确与错误时均给出相应的提示信息&#xff0c;规定用户输入错误次数不能超过3次。&#xff08;源代码运行界面&#xff09; 这里的口令有个小常识&#xff0c;就是显示*&#xff0c;在口令…

最小连通-(代码、分析、汇编)

目录&#xff1a;介绍&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;介绍&#xff1a; 一个有 n 个结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n 个结点&#xff0c; 并且有保持图连通的最少的边。 最小生成树可以用kruskal&am…

toad dba for oracle 10.5

http://worlddownloads.quest.com.edgesuite.net/Repository/support.quest.com/Toad%20for%20Oracle/10.5/Software/Toad%20DBA%20Suite%20for%20Oracle%2010.5%20Commercial.exe转载于:https://www.cnblogs.com/devbar/archive/2010/07/01/1768986.html

c++ 怎样连接两个链表_LeetCode | 链表的入口,一文帮你搞定“环形链表”(python版,最简单解析)...

链表节点的定义链表作为一种数据结构&#xff0c;由链表节点互相连接构成。链表节点包含自身的数据和一个指向下一节点的指针。""" Definition of ListNode """ class ListNode(object):def __init__(self, val, nextNone):self.val valself.ne…

QI实例-改变空间参考

学习AE一段时间了&#xff0c;总是对QI不是很理解&#xff0c;今天一晚上写了QI实例&#xff0c;尝试理解下。 首先想到的是→改变空间参考→alter、SpatialReference→alterSpatialReference&#xff0c;输入到帮助文档里。  查看是IGeoDatasetSchemaEdit接口的方法&#xf…

VeryCD 的资料库

呵呵&#xff0c;刚才看了下VeryCD的资料库&#xff0c;恍然间才明白为什么VeryCD以前花大量时间和精力开发电驴&#xff0c;又为什么不久前突然取消了KAD网络和ED2k网络的搜索功能。呵呵&#xff0c;天下没有免费的午餐哈&#xff0c;VeryCD先用电驴软件聚集客户群&#xff08…

Java IdentityHashMap keySet()方法及示例

IdentityHashMap类keySet()方法 (IdentityHashMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to get a set of all the existing keys in this IdenityHashMap to be viewed in …

C#省市二级联动(王者荣耀挑选英雄为例)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace beyond_联动_ {public partial clas…

二叉排序树(Binary Sort Tree) 又称为二叉查找树(Binary Search Tree) - (代码、分析)

目录&#xff1a;代码&#xff1a;分析&#xff1a;代码&#xff1a; BSTree.h #ifndef _BSTREE_H_ #define _BSTREE_H_typedef void BSTree;//定义二叉树类型 typedef void BSKey;//定义节点的键值类型&#xff08;用于节点排序&#xff09;typedef struct _tag_BSTreeNode …

springboot tomcat默认线程数_记一次JAVA线程池的错误用法

最近项目一个项目要结项了&#xff0c;但客户要求 TPS 能达到上千&#xff0c;而用我写的代码再怎么弄成只能达到 30 的 TPS&#xff0c;然后我又将代码中能缓存的都缓存了&#xff0c;能拆分的也都拆分了&#xff0c;拆分时用的线程池来实现的&#xff1b;其实现的代码主要为…

引以为鉴-ARM开发板连线注意事项

前些日子把实验室的三台机子放到一个工位上&#xff0c;非常拥挤&#xff0c;做实验也很不方便。因此&#xff0c;想把ARM开发板的环境重新搭建到自己的电脑上。说完就做&#xff0c;上午就开始忙活起来。把开发板上的USB线、串口线、JTAT接口、还有电源线一一插好。接着就开始…

CString 类型和引用

怎么理解CString & 类型&#xff1f;在函数参数表中&#xff0c;列了一项是此类型&#xff0c;据说是引用。可以给个具体方法&#xff0c;示例么&#xff1f; 由于子程序调用是栈传递参数&#xff0c;因此对参数的修改不会改变调用者传入的参数的值。如果要改变调用者的参数…

Java IdentityHashMap putAll()方法与示例

IdentityHashMap类putAll()方法 (IdentityHashMap Class putAll() method) putAll() method is available in java.util package. putAll()方法在java.util包中可用。 putAll() method is used to copy all of the entry (key-value pairs) that exists from the given map (m)…

Python---实验八

1&#xff0c;现在有一份‘邀请函.txt’的空白文件&#xff0c;请在同级目录下编写一段代码&#xff0c;写入内容‘诚挚邀请您来参加本次宴会’。 with open(fG:\study\Python\邀请函.txt,modew,encodingutf-8) as y:y.write(诚挚邀请您来参加本次宴会)效果图如下&#xff1a;…