mvc文件上传与下载
上传
<form action="/Home/UploadFile" method="post" enctype="multipart/form-data"> <input type="file" name="file" /><br /> <input type="submit" value="提交" /> </form>
后台
[HttpPost] public ActionResult UploadFile(HttpPostedFileBase file) { string basePath = System.AppDomain.CurrentDomain.BaseDirectory; var files = Request.Files; //获得文件的方法 if (files != null && files.Count >1) { #region 执行多个文件上传 for (int i = 0; i < files.Count; i++) { HttpPostedFileBase fileitem = files[i]; //判定文件的大小 string strExtension = Path.GetExtension(fileitem.FileName); double dFileSize = fileitem.ContentLength; if (dFileSize > 5242880)//1024*1024*5) { return Content("<script>alert('" + fileitem.FileName + "文件大于5MB')</script>"); } else { //创建文件 string filePath = "~/Files"; Directory.CreateDirectory(Server.MapPath(filePath)); //创建唯一的文件名 string fileName = Guid.NewGuid().ToString(); string fFullDir = filePath + fileName + strExtension; fileitem.SaveAs(Server.MapPath(fFullDir)); } } #endregion } else { #region 执行单个文件上传 if (file != null) { //可以判断它的大小格式 //创建文件夹 string filePath = "~/Files"; string path = Server.MapPath(filePath); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } int size = file.ContentLength; string timePath = DateTime.Now.ToString("yyyyMMddHHmmss"); string fileName = timePath+file.FileName; string pathh = Path.Combine(path, fileName); file.SaveAs(pathh); //return Content("<script>alert('上传成功!');location.href=" // + Url.Content(filePath) + "</script>"); } #endregion } return View(); }
方法二:
public ResponseResult<string> PostFile([FromForm] IFormCollection formCollection, long reportId) { //var files =Request.Form.Files; String htmlContent = String.Empty; String Content = String.Empty; FormFileCollection fileCollection = (FormFileCollection)formCollection.Files; foreach (IFormFile file in fileCollection) { var root = AppDomain.CurrentDomain.BaseDirectory;// Environment.CurrentDirectory; String UploadRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files");// @"D:/Test/"; String ftype = Path.GetExtension(file.FileName); String fileName = reportId.ToString() + ftype; String fileFullPath = Path.Combine(UploadRoot, fileName); //D:\\Test\\陕西省天然林保护修复条例(FBM-CLI-10-4779517).doc List<string> arrs = new List<string>() { ".doc",".docx"}; if (!arrs.Contains(ftype)) { return Result(ResultCode.Fail, "上传失败,支持doc或者docx格式的文件"); } var fileSize = file.Length; if (fileSize > 1024 * 1024 * 25) //25M TODO:(1mb=1024X1024b) { return Result(ResultCode.Fail, "上传失败,文件最大不能超过25M"); } if (!Directory.Exists(UploadRoot)) { Directory.CreateDirectory(UploadRoot); } if (System.IO.File.Exists(fileFullPath)) { System.IO.File.Delete(fileFullPath); } using (FileStream fs = System.IO.File.Create(fileFullPath)) { // 复制文件 file.CopyTo(fs); // 清空缓冲区数据 fs.Flush(); } } return SuccessResult(); }
下载:
<li>@Html.ActionLink("文件下载", "FileDown", "Home")</li>
public FileStreamResult FileDown() {
//把Files文件夹下的“常用方法.txt”记事本保存到电脑上,保存后的记事本名字为“aaa.txt” string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("~/Files/常用方法.txt");//路径 "D:\\abc.xls";//文件路径 return File(new FileStream(filePath, FileMode.Open), "text/plain", fileName); }
网上的方法:
方式一: public FileStreamResult DownFile(string filePath, string fileName) { string absoluFilePath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["AttachmentPath"] + filePath); return File(new FileStream(absoluFilePath, FileMode.Open), "application/octet-stream", Server.UrlEncode(fileName)); } 方式二: public ActionResult DownFile(string filePath, string fileName) { filePath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["AttachmentPath"] + filePath);
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
return new EmptyResult();
}
View调用: <a href="/Document/DownFile?filePath=@item.Value&fileName=@item.Key">下载</a>