/// <summary> /// Загрузка файла с удаленного ресурса по Url /// </summary> /// <param name="url">Url адрес представляющий собой ссылку на загрузку файла</param> /// <returns>MethodResult где свойство Data хранить локальный путь к загруженному файлу</returns> public MethodResult DownloadFile(string url) { var result = new MethodResult() { Success = false }; HttpResponseMessage response = null; Stream stream = null; try { using (HttpClientHandler handler = new HttpClientHandler()) { handler.AllowAutoRedirect = false; using (HttpClient httpClient = new HttpClient(handler)) { httpClient.Timeout = TimeSpan.FromMinutes(30); using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, url)) using (response = httpClient.SendAsync(request).Result) { var location = response.Headers.Location; if (location != null) { response = httpClient.GetAsync(location.OriginalString).Result; stream = response.Content.ReadAsStreamAsync().Result; } else { stream = response.Content.ReadAsStreamAsync().Result; } string mediaType = response.Content.Headers.ContentType.MediaType; string directoryPath = Path.Combine(Directory.GetCurrentDirectory(), "Download"); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } string path = Path.Combine(directoryPath, Guid.NewGuid().ToString() + "." + mediaType.Substring(mediaType.IndexOf('/') + 1) ); using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { stream.CopyTo(fs); } result.Data = path; result.Success = true; } } } } catch (Exception ex) { result.Message = ex.Message; result.Success = false; } return(result); }