写在前面

上篇文章通过iframe实现了文件的无刷新上传。这篇我们将实现文件的下载与删除。

系列文章

[EF]vs15+ef6+mysql code first方式

[实战]MVC5+EF6+MySql企业网盘实战(1)

[实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

[实战]MVC5+EF6+MySql企业网盘实战(3)——验证码

[实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像

[Bootstrap]modal弹出框

[实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩

[实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板

[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册

[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录

[实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传

[实战]MVC5+EF6+MySql企业网盘实战(8)——文件下载、删除

核心代码

上篇实现文件的上传,需要加上一段逻辑,判断上传的文件大小+网盘中所有文件的大小是否已经大于个人网盘的实际容量,如果大于则给予提示,所以,文件上传的代码修改后如下所示:

     [HttpPost]
        public void UploadFile(string filePath)
        {
            UserInfo userInfo = Session["user"] as UserInfo;
            if (userInfo == null)
            {
                RedirectToAction("Login", "UserInfo");
            }
            var files = Request.Files;
            if (files.Count > 0)
            {
                var file = files[0];
                string fileName = file.FileName;
                Stream inputStream = file.InputStream;
                string fileSaveFolder = Request.MapPath("~/NetDisk/" + userInfo.UserName);
                if (!string.IsNullOrEmpty(filePath))
                {
                    fileSaveFolder = Path.Combine(fileSaveFolder, filePath);
                }

                //如果目标不存在,则创建
                if (!Directory.Exists(fileSaveFolder))
                {
                    Directory.CreateDirectory(fileSaveFolder);

                }
                byte[] buffer = new byte[inputStream.Length];
                //判断是否已经超出个人网盘大小
                int myDiskSize = _myFileServiceRepository.FindAll(x => x.User.Id == userInfo.Id).Sum(x => x.FileSize);
                //如果已经超出网盘大小,则给出提示
                if (myDiskSize + buffer.Length > userInfo.NetDiskSize)
                {
                    AlertMsg("对不起,您的网盘空间不足,请清理后再次上传,或联系管理员进行扩容。", "");
                    return;
                }
                inputStream.Read(buffer, 0, buffer.Length);
                string strFileMd5 = MD5Helper.GetMD5FromFile(buffer);
                string fileSavePath = Path.Combine(fileSaveFolder, filePath);
                fileSavePath = Path.Combine(fileSaveFolder, fileName);
                //如果文件已经存在
                if (System.IO.File.Exists(fileSavePath))
                {
                    //对文件进行重命名
                    fileName = ReNameHelper.FileReName(fileSavePath);
                    fileSavePath = Path.Combine(fileSaveFolder, fileName);
                }
                file.SaveAs(fileSavePath);
                var currentUser = _userInfoServiceRepository.Find(x => x.Id == userInfo.Id);
                MyFile myFile = new MyFile()
                {
                    FileMd5 = strFileMd5,
                    ModifyDt = DateTime.Now,
                    IsDelete = false,
                    FileSize = buffer.Length,
                    FilePath = "/NetDisk/" + userInfo.UserName + "/" + fileName,
                    FileExt = Path.GetExtension(fileSavePath),
                    CreateDt = DateTime.Now,
                    FileName = fileName,
                    FileIcon = GetFileIcon(Path.GetExtension(fileSavePath)),
                    User = currentUser
                };
                //保存数据库
                _myFileServiceRepository.Add(myFile);
                _myFileServiceRepository.SaveChanges();
                string json = new JavaScriptSerializer().Serialize(myFile);
                AlertMsg("上传成功", json);
            }
        }
UploadFile

相关文章:

  • 2021-07-27
  • 2021-10-14
  • 2021-08-15
  • 2021-09-29
  • 2021-07-11
  • 2021-10-18
猜你喜欢
  • 2021-11-19
  • 2021-06-06
  • 2021-07-21
  • 2021-10-31
  • 2021-08-29
相关资源
相似解决方案