using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Device.ApiCommonModel.AksModel; namespace DevicesService.Common { public class ChunkedUpload { private readonly HttpClient _httpClient; public ChunkedUpload(HttpClient httpClient) { _httpClient = httpClient; } public async Task UploadFileAsync(string url, string filePath) { string ret = string.Empty; using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { FileInfo fileInfo = new FileInfo(filePath); int totalParts = 1; int chunkNumber = 1; // 读取文件流其实位置 var fileStreamPos = 0; var uploadUrl = $"{url}?partNumber={chunkNumber}&chunks={totalParts}&size={fileInfo.Length}&start={fileStreamPos}&end={fileInfo.Length}&total={fileInfo.Length}&FileName={Path.GetFileName(filePath)}"; using (var client = new HttpClient()) { var formData = new MultipartFormDataContent(); formData.Add(new StreamContent(fileStream, (int)fileStream.Length), "file", Path.GetFileName(filePath) + ".partNumber-1"); var response = await client.PostAsync(uploadUrl, formData); var responseString = await response.Content.ReadAsStringAsync(); fileStream.Close(); fileStream.Dispose(); ret = responseString; JObject jo = (JObject)JsonConvert.DeserializeObject(ret); if (Convert.ToBoolean(jo["IsSucceed"].ToString()) == true) { string result = jo["result"].ToString(); JObject jo1 = (JObject)JsonConvert.DeserializeObject(result); ret = jo1["url"].ToString(); } } } return ret; } } }