網站首頁 編程語言 正文
前言
更新都寫完了,但是要更新文件要怎么操作呢?連接服務器然后上傳上去,修改下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 href="./layui/css/layui.css" >
</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>
實現效果
代碼解析:
文件上傳完之后,若xml文件中已經存在該文件名稱,則進行版本+0.01,否則新加一條節點信息,默認版本號為1.00。然后這里由于要操作文件,所以又加了個鎖來防止占用(總覺得這個方式不太合適),主要是因為layui的多文件上傳是循環調接口實現的,感覺不太好,建議使用其他框架或者對js代碼進行更改。
原文鏈接:https://mp.weixin.qq.com/s/LKabsXQfQeTKSb-GifmDSw
相關推薦
- 2022-12-08 C語言帶頭雙向循環鏈表的示例代碼_C 語言
- 2022-07-18 Maven快照更新策略
- 2022-10-02 react中使用antd及immutable示例詳解_React
- 2022-02-10 linux后臺運行任務命令(nohup: 忽略輸入并把輸出追加到“nohup.out“)
- 2022-05-31 詳解Docker?Compose配置文件參數_docker
- 2022-11-14 Django?ORM?事務和查詢優化的操作方法_python
- 2022-11-25 詳解React中Fragment的簡單使用_React
- 2022-12-24 C++中的函數返回值與拷貝用法_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支