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>

  

posted @ 2018-05-07 17:08  哈根达斯  阅读(668)  评论(0编辑  收藏  举报