Http Web Api下载文件
/// <summary> /// 下载文件 /// </summary> /// <param name="serialNumber"></param> /// <param name="siteOperation"></param> /// <param name="location"></param> /// <returns>文件</returns> [HttpGet] [Route("DownLoadTemplate")] public IHttpActionResult DownLoadTemplate(string serialNumber, string siteOperation, string location) { DownLoadFileRequestDto model = new DownLoadFileRequestDto() { Location = location, SerialNumber = serialNumber, SiteOperation = siteOperation }; if (!ModelState.IsValid) { return new ResponseMessageResult(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new HttpError(GetModelStateErrs()))); } try { var result = _sysFileService.GetFile(model); if (result.Item2 == null || result.Item2.Length == 0) { return new ResponseMessageResult(Request.CreateErrorResponse((HttpStatusCode)422, new HttpError("文件不存在"))); } var extenstion = Path.GetExtension(result.Item1); HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StreamContent(new MemoryStream(result.Item2));//Item2是byte[]类型 response.Content.Headers.ContentType = new MediaTypeHeaderValue($@"application/*{extenstion}"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = result.Item1 }; return ResponseMessage(response); } catch (Exception ex) { Log(new List<object> { model }, ex); throw; } }
/// <summary> /// 下载文件 /// </summary> /// <param name="uri">资源网址</param> /// <param name="localPath">要保存到本地的目录路径 如:C://Download/</param> /// <returns></returns> public bool DownLoad(string uri, string localPath) { var server = new Uri(uri); var p = Path.GetDirectoryName(localPath); if (!Directory.Exists(p)) Directory.CreateDirectory(p); // 发起请求并异步等待结果 var httpClient = new HttpClient(); var responseMessage = httpClient.GetAsync(server).Result; if (responseMessage.IsSuccessStatusCode) { using (var fs = File.Create($@"{localPath}/{responseMessage.Content.Headers.ContentDisposition.FileName}")) { // 获取结果,并转成 stream 保存到本地。 var streamFromService = responseMessage.Content.ReadAsStreamAsync().Result; streamFromService.CopyTo(fs); _frmMain.ShowMessage("下载成功"); return true; } } _frmMain.ShowResult(responseMessage); return false; }
另外,从Oracle读写文件的方式:C# 读写Oracle BLOB - 岭南春 - 博客园 (cnblogs.com)
浙公网安备 33010602011771号