我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#WinForm自动更新程序之文件上传操作详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#WinForm自动更新程序之文件上传操作详解

前言

更新都写完了,但是要更新文件要怎么操作呢?连接服务器然后上传上去,修改下xml的版本号当然也是可以的,但是还是没有写个程序使用起来方便,所以这一篇就写一个简单的上传程序。后台依然是使用的.net core webapi,然后新建个控制器来接收上传来的文件。前台就直接使用layui随便搭个上传表单。

开发环境

.NET Core 3.1

开发工具

Visual Studio 2019

实现代码


//控制器代码
namespace AutoUpdate.WebApi.Controllers {
    [Route("api/[controller]")]
    [ApiController]
    public class UploadController : ControllerBase {
        private static object obj = new object();

        [HttpPost]
        public JsonResult Upload() {

            IFormFileCollection formFile = Request.Form.Files;
            if(formFile.Count == 0) {
                throw new Exception("没有文件");
            }

            ReturnResult result = new ReturnResult(Result.success);
            string path = AppContext.BaseDirectory + "files\\";
            string xmlPath = AppContext.BaseDirectory + "UpdateList.xml";
            try {
                foreach(var file in formFile) {
                    string fileName = path + file.FileName;
                    using FileStream fileStream = System.IO.File.Create(fileName);
                    file.CopyTo(fileStream);
                    fileStream.Flush();
                }

                List<string> UpdateFiles = formFile.Select(s => s.FileName).ToList();
                UpdateXml(UpdateFiles);
            }
            catch(Exception ex) {
                result.result = Result.error;
                result.msg = ex.Message;
            }
            return new JsonResult(result);
        }
        private void UpdateXml(List<string> UpdateFiles) {
            lock(obj) {
                string xmlPath = AppContext.BaseDirectory + "UpdateList.xml";
                XDocument xdoc = XDocument.Load(xmlPath);
                foreach(string file in UpdateFiles) {
                    var ele_files = xdoc.Root.Element("files");

                    XElement xele = ele_files.Elements().FirstOrDefault(s => s.Attribute("name").Value == file);
                    if(xele != null) {
                        string oldVer = xele.Attribute("version").Value;
                        xele.SetAttributeValue("version", Math.Round(decimal.Parse(oldVer) + (decimal)0.01, 2));
                    }
                    else {
                        XElement addXele = new XElement("file");
                        addXele.SetAttributeValue("name", file);
                        addXele.SetAttributeValue("version", "1.00");
                        ele_files.Add(addXele);
                    }
                }
                xdoc.Save(xmlPath);
            }
        }
    }
}

//html代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>文件更新</title>
    <link rel="stylesheet" href="./layui/css/layui.css" rel="external nofollow" >
</head>
<body>
    <div class="layui-form-item" style="margin:15%">
        <div class="layui-col-md10 layui-col-xs9 layui-form-item-mt5">
            <label class="layui-form-label">文件上传</label>
            <div class="layui-input-block">
                <input type="text" id="filename" name="filename" class="layui-input" readonly />
            </div>
        </div>
        <div class="layui-col-md2 layui-col-xs1 layui-form-item-mt5">
            <button class="layui-btn" id="btnBrowse">浏览</button>
            <button class="layui-btn" id="submit" lay-filter="submit" lay-submit>上传</button>
        </div>
    </div>
    <script class="lazy" data-src="./layui/layui.js"></script>
    <script>
        var layer = layui.layer, form = layui.form, $ = layui.jquery,
            upload = layui.upload;

        form.render();
        upload.render({
            elem: '#btnBrowse'
            , url: 'http://localhost:5000/api/Upload'
            , headers: {}
            , data: {}
            , accept: 'file'
            , multiple: true
            , auto: false
            , bindAction: '#submit'
            , choose: function (obj) {
                $("#filename").val("");
                obj.preview(function (index, file, result) {
                    $("#filename").val($("#filename").val() + file.name + " ; ");
                })
            }
            , done: function (res, index, upload) {
                layer.closeAll('loading');
                layer.msg(res.msg);
            },
            error: function (res) {
                layer.closeAll('loading');
            }
        })
</script>
</body>
</html>

实现效果

代码解析:

文件上传完之后,若xml文件中已经存在该文件名称,则进行版本+0.01,否则新加一条节点信息,默认版本号为1.00。然后这里由于要操作文件,所以又加了个锁来防止占用(总觉得这个方式不太合适),主要是因为layui的多文件上传是循环调接口实现的,感觉不太好,建议使用其他框架或者对js代码进行更改。

到此这篇关于C# WinForm自动更新程序之文件上传操作详解的文章就介绍到这了,更多相关C# WinForm自动更新程序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#WinForm自动更新程序之文件上传操作详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#WinForm自动更新程序之文件上传操作详解

这篇文章主要为大家详细介绍了C#WinForm自动更新程序中文件上传操作,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
2022-11-13

详解C#WinForm如何实现自动更新程序

在C/S这种模式中,自动更新程序就显得尤为重要,它不像B/S模式,直接发布到服务器上,浏览器点个刷新就可以了。本文就为大家准备了WinForm实现自动更新程序的示例代码,需要的可以参考一下
2022-11-13

C#WinForm实现自动更新程序的方法详解

这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表,感兴趣的小伙伴可以了解一下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录