You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Txgy.EWS.Client.Upgrade.Model;
|
|
|
|
namespace Txgy.EWS.Client.Upgrade.DAL
|
|
{
|
|
public class WebDataAccess
|
|
{
|
|
LocalDataAccess localDataAccess = new LocalDataAccess();
|
|
|
|
public async Task<int> DownloadAsync(List<FileInfoModel> files, Action<FileInfoModel> callback)
|
|
{
|
|
using (var client = new HttpClient())
|
|
{
|
|
foreach (var item in files)
|
|
{
|
|
//
|
|
try
|
|
{
|
|
string url = ConfigurationManager.AppSettings["file_download_url"];
|
|
var postContent = new MultipartFormDataContent();
|
|
string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x"));
|
|
postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}");
|
|
postContent.Add(new StringContent(item.FileName), "filename");
|
|
|
|
|
|
var response = await client.PostAsync(url, postContent);
|
|
/// 文件下载
|
|
byte[] result = await response.Content.ReadAsByteArrayAsync();
|
|
|
|
string fileName = Path.Combine(Environment.CurrentDirectory, item.FileName);
|
|
using (FileStream fs = new FileStream(fileName, FileMode.Create))
|
|
{
|
|
fs.Write(result, 0, result.Length);
|
|
fs.Flush();
|
|
}
|
|
|
|
// 数据更新到本地缓存数据库
|
|
if (!localDataAccess.UpdateFileInfo(item.FileName, item.FileMd5))
|
|
{
|
|
throw new Exception("同步更新本地缓存出现异常");
|
|
}
|
|
|
|
item.State = "完成";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
item.ErrorMsg = $"[{ex.Message}]";
|
|
}
|
|
finally
|
|
{
|
|
callback?.Invoke(item);
|
|
}
|
|
|
|
}
|
|
return files.Count(f => f.State == "完成");
|
|
}
|
|
}
|
|
}
|
|
}
|