最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# WinForm自動(dòng)更新程序之文件上傳操作詳解

 更新時(shí)間:2022年10月23日 10:26:28   作者:Csharp小記  
這篇文章主要為大家詳細(xì)介紹了C# WinForm自動(dòng)更新程序中文件上傳操作,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下

前言

更新都寫(xiě)完了,但是要更新文件要怎么操作呢?連接服務(wù)器然后上傳上去,修改下xml的版本號(hào)當(dāng)然也是可以的,但是還是沒(méi)有寫(xiě)個(gè)程序使用起來(lái)方便,所以這一篇就寫(xiě)一個(gè)簡(jiǎn)單的上傳程序。后臺(tái)依然是使用的.net core webapi,然后新建個(gè)控制器來(lái)接收上傳來(lái)的文件。前臺(tái)就直接使用layui隨便搭個(gè)上傳表單。

開(kāi)發(fā)環(huán)境

.NET Core 3.1

開(kāi)發(fā)工具

Visual Studio 2019

實(shí)現(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("沒(méi)有文件");
            }

            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>

實(shí)現(xiàn)效果

代碼解析:

文件上傳完之后,若xml文件中已經(jīng)存在該文件名稱,則進(jìn)行版本+0.01,否則新加一條節(jié)點(diǎn)信息,默認(rèn)版本號(hào)為1.00。然后這里由于要操作文件,所以又加了個(gè)鎖來(lái)防止占用(總覺(jué)得這個(gè)方式不太合適),主要是因?yàn)閘ayui的多文件上傳是循環(huán)調(diào)接口實(shí)現(xiàn)的,感覺(jué)不太好,建議使用其他框架或者對(duì)js代碼進(jìn)行更改。

到此這篇關(guān)于C# WinForm自動(dòng)更新程序之文件上傳操作詳解的文章就介紹到這了,更多相關(guān)C# WinForm自動(dòng)更新程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家

相關(guān)文章

最新評(píng)論

常熟市| 三门峡市| 松原市| 新竹县| 浦县| 安庆市| 昌图县| 海城市| 阳高县| 勐海县| 玉林市| 宜君县| 屯留县| 慈溪市| 邛崃市| 长治市| 兰西县| 榆树市| 文成县| 崇义县| 焦作市| 河池市| 德阳市| 化州市| 五原县| 元阳县| 双城市| 军事| 防城港市| 湘潭县| 正蓝旗| 龙川县| 高台县| 攀枝花市| 鹤壁市| 卢龙县| 绿春县| 江津市| 离岛区| 政和县| 通化市|