FirmwareUploadProcedure.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using AwInitilizer.Assist;
  2. using AwInitilizer.Model;
  3. using InitializerModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.Specialized;
  7. using System.Globalization;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Net;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Web;
  14. namespace AwInitilizer.Procedure
  15. {
  16. public class FirmwareUploadProcedure : ProcedureBase
  17. {
  18. internal string Version;
  19. internal string fileName;
  20. internal string module;
  21. private FirmwareUpdateModel _model;
  22. public FirmwareUploadProcedure(FirmwareUpdateModel model) : base()
  23. {
  24. _model = model;
  25. Name = string.Format("Firmware {0} upload", model.Module);
  26. Content = string.Format("Update {0} Firemware", model.Module);
  27. Version = model.Version;
  28. fileName = model.FirmwareFileName;
  29. module = model.Module;
  30. }
  31. internal override async Task<bool> Run()
  32. {
  33. Logger.Print("Firmware Uploading...");
  34. var uploadResult = await Uploadfirmware(fileName);
  35. MesLogData.Add($"{module}Upload", uploadResult?"1":"0", uploadResult);
  36. return uploadResult;
  37. }
  38. internal async Task<bool> Uploadfirmware(string fileName)
  39. {
  40. try
  41. {
  42. var result = await EvApi.Uploadfirmware(fileName);
  43. InfoLog += $"get firmware update response {result.Response}\n";
  44. return result.Result;
  45. //using (var stream = File.Open(fileName, FileMode.Open))
  46. //{
  47. // UploadFileAsync(
  48. // new NameValueCollection()
  49. // {
  50. // {"fw_tag","iso" }
  51. // },
  52. // new UploadFile()
  53. // {
  54. // Name = "file",
  55. // Filename = Path.GetFileName(fileName),
  56. // Stream = stream
  57. // }
  58. // );
  59. //}
  60. //return true;
  61. //using (var stream = File.Open(fileName, FileMode.Open))
  62. //{
  63. // var response = await UploadFiles(
  64. // $"https://{ServerIpAddress}/upgrade_iso_action.php",
  65. // new List<UploadFile>() {
  66. // new UploadFile()
  67. // {
  68. // Name="file",
  69. // Filename= Path.GetFileName(fileName),
  70. // Stream = stream
  71. // }
  72. // },
  73. // new NameValueCollection() {
  74. // {"fw_tag","iso" }
  75. // }
  76. // );
  77. // var responseStr = Encoding.ASCII.GetString(response).ToLower();
  78. // InfoLog += $"get firmware update response {responseStr}\n";
  79. // if (responseStr.Contains("file is uploaded"))
  80. // return true;
  81. // return false;
  82. //}
  83. //return true;
  84. //using (WebClient webClient = new WebClient())
  85. //{
  86. // NameValueCollection parameters = new NameValueCollection();
  87. // parameters.Add("fw_tag", "iso");
  88. // webClient.QueryString = parameters;
  89. // var responseBytes = await webClient.UploadFileTaskAsync($"https://{ServerIpAddress}/upgrade_iso_action.php", fileName);
  90. // string responseString = Encoding.ASCII.GetString(responseBytes);
  91. // return true;
  92. //}
  93. }
  94. catch (Exception e)
  95. {
  96. Logger.Print("Upload Firmware Failed", isError: true);
  97. Logger.Print(e.Message + "", isError: true);
  98. InfoLog += "Upload Firmware Failed\n";
  99. InfoLog += e.Message;
  100. InfoLog += "\n";
  101. return false;
  102. }
  103. }
  104. public async Task<byte[]> UploadFiles(string address, IEnumerable<UploadFile> files, NameValueCollection values)
  105. {
  106. var request = (HttpWebRequest)HttpWebRequest.Create(address);
  107. request.Timeout = 60 * 1000;
  108. request.KeepAlive = true;
  109. request.Accept = "*/*";
  110. request.Method = "POST";
  111. request.Referer = address;
  112. request.Expect = "";
  113. var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
  114. request.ContentType = "multipart/form-data; boundary=" + boundary;
  115. boundary = "--" + boundary;
  116. using (var requestStream = request.GetRequestStream())
  117. {
  118. // Write the values
  119. foreach (string name in values.Keys)
  120. {
  121. var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
  122. requestStream.Write(buffer, 0, buffer.Length);
  123. buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
  124. requestStream.Write(buffer, 0, buffer.Length);
  125. buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
  126. requestStream.Write(buffer, 0, buffer.Length);
  127. }
  128. // Write the files
  129. foreach (var file in files)
  130. {
  131. var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
  132. requestStream.Write(buffer, 0, buffer.Length);
  133. buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine));
  134. requestStream.Write(buffer, 0, buffer.Length);
  135. var ctype = MimeMapping.GetMimeMapping(file.Filename);
  136. buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", MimeMapping.GetMimeMapping(file.Filename), Environment.NewLine));
  137. requestStream.Write(buffer, 0, buffer.Length);
  138. file.Stream.CopyTo(requestStream);
  139. buffer = Encoding.ASCII.GetBytes(Environment.NewLine);
  140. requestStream.Write(buffer, 0, buffer.Length);
  141. }
  142. var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--");
  143. requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
  144. }
  145. using (var response = await request.GetResponseAsync())
  146. using (var responseStream = response.GetResponseStream())
  147. using (var stream = new MemoryStream())
  148. {
  149. responseStream.CopyTo(stream);
  150. return stream.ToArray();
  151. }
  152. }
  153. }
  154. }