web文件下载实现
Posted bad_programmer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web文件下载实现相关的知识,希望对你有一定的参考价值。
服务端实现
public HttpResponseMessage GetFile(string fileName,string folder,long expires=0) { try { string filePath = UpdateController.BaseDir + folder + "\" + fileName; if (File.Exists(filePath) == false) { ServerLogger.Error("get file failed,cannot find file:"+ filePath); HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent("get file failed,cannot find file:"+ filePath, System.Text.Encoding.UTF8, "text/plain") }; return message; } var fs = File.OpenRead(filePath); MemoryStream stream = new MemoryStream(); fs.CopyTo(stream); HttpResponseMessage response = new HttpResponseMessage(); response.Content = new ByteArrayContent(stream.GetBuffer(), 0, (int)stream.Length); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentDisposition.FileName = fileName; stream.Dispose(); return response; } catch(Exception ex) { ServerLogger.Error("Get update file exception,fileName:"+ fileName + ",folder:"+ folder, ex); HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent("GetFile failed,exception occured,fileName:"+fileName, System.Text.Encoding.UTF8, "text/plain") }; return message; } }
前端实现
var webRequest = (HttpWebRequest)WebRequest.Create(fileUrl); webRequest.Timeout = 1000 * 120; webRequest.Method = HttpMethod.Get.ToString().ToUpperInvariant(); var response = webRequest.GetResponse() as HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.OK)//如果成功 { string fileinfo = response.Headers["Content-Disposition"]; string fileName = fileinfo.Substring(fileinfo.LastIndexOf("filename=")); fileName = fileName.Replace("filename=", ""); string filePath = folder+ fileName; var fs = new FileStream(filePath, FileMode.CreateNew); //var ms = new MemoryStream();//输出的stream WriteTo(response.GetResponseStream(), fs);//写到ms中 fs.Seek(0, SeekOrigin.Begin); fs.Close(); }
其中WriteTo为:
void WriteTo(Stream src, Stream dest) { int bufferSize = 4 * 1024; var buffer = new byte[bufferSize]; int bytesRead; while ((bytesRead = src.Read(buffer, 0, buffer.Length)) > 0) { dest.Write(buffer, 0, bytesRead); } dest.Flush(); src.Close(); }
以上是关于web文件下载实现的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途