C# WinForm自動更新程序之文件上傳操作詳解
前言
更新都寫完了,但是要更新文件要怎么操作呢?連接服務(wù)器然后上傳上去,修改下xml的版本號當然也是可以的,但是還是沒有寫個程序使用起來方便,所以這一篇就寫一個簡單的上傳程序。后臺依然是使用的.net core webapi,然后新建個控制器來接收上傳來的文件。前臺就直接使用layui隨便搭個上傳表單。
開發(fā)環(huán)境
.NET Core 3.1
開發(fā)工具
Visual Studio 2019
實現(xiàn)代碼
//控制器代碼 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 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>
實現(xiàn)效果
代碼解析:
文件上傳完之后,若xml文件中已經(jīng)存在該文件名稱,則進行版本+0.01,否則新加一條節(jié)點信息,默認版本號為1.00。然后這里由于要操作文件,所以又加了個鎖來防止占用(總覺得這個方式不太合適),主要是因為layui的多文件上傳是循環(huán)調(diào)接口實現(xiàn)的,感覺不太好,建議使用其他框架或者對js代碼進行更改。
到此這篇關(guān)于C# WinForm自動更新程序之文件上傳操作詳解的文章就介紹到這了,更多相關(guān)C# WinForm自動更新程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家
相關(guān)文章
C# Winform實現(xiàn)表格復(fù)制粘貼效果
這篇文章主要為大家學習介紹了如何通過C# Winform實現(xiàn)表格復(fù)制粘貼效果,文中的示例代碼講解詳細,具有一定的參考價值,需要的可以了解一下2023-07-07C#實現(xiàn)將應(yīng)用程序設(shè)置為開機啟動的方法
這篇文章主要介紹了C#實現(xiàn)將應(yīng)用程序設(shè)置為開機啟動的方法,涉及C#針對注冊表的寫入技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09C#?webApi創(chuàng)建與發(fā)布、部署、api調(diào)用詳細教程
這篇文章主要給大家介紹了關(guān)于C#?webApi創(chuàng)建與發(fā)布、部署、api調(diào)用的相關(guān)資料,WebApi是微軟在VS2012?MVC4版本中綁定發(fā)行的,WebApi是完全基于Restful標準的框架,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法
這篇文章主要介紹了VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09自定義實現(xiàn)Json字符串向C#對象轉(zhuǎn)變的方法
自定義實現(xiàn)Json字符串向C#對象轉(zhuǎn)變的方法,需要的朋友可以參考一下2013-03-03