新文章 网摘 文章 随笔 日记

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)

 

posted @ 2022-11-18 08:29  岭南春  阅读(146)  评论(0)    收藏  举报