FirmwareUploadProcedure.cs 6.9 KB

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