标签:file mode png 文件名 nbsp har length att ack
1、序言
最近项目中需要用到这个功能点,但是网上下载的时候总是出现乱码。所以趁着这个时间自己整理出了一份,以后需要的时候就直接看自己的博客就行了。已经测试过:在谷歌、火狐、IE等浏览器上都不会出现乱码问题。
2、结果展示
2.1、上传文件成功界面
2.2、下载文件成功界面
3、上传文件代码
3.1、View代码
@model System.Web.HttpContextBase @{ ViewBag.Title = "上传文件"; } <h2>上传文件</h2> <br /> <br /> @*new { enctype = "multipart/form-data" }比不可少,否则上传文件不会成功 *@ @using (Html.BeginForm("Upload", "UploadFile", FormMethod.Post, new { enctype = "multipart/form-data" })) { <text>选择上传文件:</text><input name="file" type="file" id="file" /> <br /> <br /> <input type="submit" name="Upload" value="Upload" /> }
3.2、Controller代码
[HttpPost] public ActionResult Upload(FormCollection form) { if (Request.Files.Count == 0){ //Request.Files.Count 文件数为0上传不成功 return View(); } var file = Request.Files[0]; if (file.ContentLength == 0){ //文件大小大(以字节为单位)为0时,做一些操作 return View(); } else{ //文件大小不为0 file = Request.Files[0]; //保存成自己的文件全路径,newfile就是你上传后保存的文件, //服务器上的UpLoadFile文件夹必须有读写权限 string target = Server.MapPath("/")+("/Mock/Learning/");//取得目标文件夹的路径 string filename = file.FileName;//取得文件名字 string path = target + filename;//获取存储的目标地址 file.SaveAs(path);} return View(); }
4、下载文件代码
4.1、View代码
<a href="/DownloadFile/Download?filePath=@ViewBag.Value&fileName=‘小王子.pdf‘">下载</a>
4.2、Controller代码
public ActionResult Download(string filePath, string fileName) { Encoding encoding; string outputFileName = null; fileName = fileName.Replace("‘", ""); string browser =Request.UserAgent.ToUpper(); if (browser.Contains("MS") == true && browser.Contains("IE") == true) { outputFileName = HttpUtility.UrlEncode(fileName); encoding =Encoding.Default; } else if (browser.Contains("FIREFOX") == true) { outputFileName = fileName; encoding =Encoding.GetEncoding("GB2312"); } else { outputFileName = HttpUtility.UrlEncode(fileName); encoding = Encoding.Default; } FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.Charset = "UTF-8"; Response.ContentType = "application/octet-stream"; Response.ContentEncoding = encoding; Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFileName); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); return new EmptyResult(); }
标签:file mode png 文件名 nbsp har length att ack
原文地址:http://www.cnblogs.com/leijing0607/p/6346520.html