mvc5 ef mysql_[实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3

[HttpPost]public void UploadFile(stringfilePath)

{

UserInfo userInfo= Session["user"] asUserInfo;//保证路径格式一直以/结束

filePath = filePath.TrimEnd('/') + "/";if (userInfo == null)

{

RedirectToAction("Login", "UserInfo");

}

filePath= Server.UrlDecode(filePath == "/" ? "/NetDisk/": filePath);var files =Request.Files;

MyFile myFile= null;if (files.Count > 0)

{var file = files[0];string fileName =file.FileName;

Stream inputStream=file.InputStream;string fileSaveFolder = Server.MapPath("~/NetDisk");//如果目标不存在,则创建

if (!Directory.Exists(fileSaveFolder))

{

Directory.CreateDirectory(fileSaveFolder);

}byte[] buffer = new byte[inputStream.Length];//判断是否已经超出个人网盘大小

var myFiles = _myFileServiceRepository.FindAll(x => x.User.Id == userInfo.Id && x.IsDelete == false);int myDiskSize = 0;if (myFiles.Count() > 0)

{

myDiskSize= myFiles.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);//名称格式一律以md5命名。

string strNewName = strFileMd5 +Path.GetExtension(file.FileName);

fileSavePath=Path.Combine(fileSaveFolder, strNewName);//如果文件不存在,则保存物理文件。

if (!System.IO.File.Exists(fileSavePath))

{

file.SaveAs(fileSavePath);

}//判断在数据库中同一路径下,md5相同,名称相同的文件是否存在,不存在则直接插入,否则对文件进行自动重命名保存。

var fileIsExist = _myFileServiceRepository.Find(x => x.FileMd5 == strFileMd5 && x.User.Id == userInfo.Id && x.FileName ==fileName);//如果找到的文件对象不为空,并且是删除状态,则修改删除状态,不再新增文件信息,否则添加。//查询导航属性

var currentUser = _userInfoServiceRepository.Find(x => x.Id ==userInfo.Id);if (fileIsExist != null)

{

myFile=fileIsExist;//文件被逻辑删除了,则更新状态,否则重命名后新增文件。

if(fileIsExist.IsDelete)

{

fileIsExist.IsDelete= false;

_myFileServiceRepository.Update(fileIsExist);

}else{//查找该用户下类似文件名的文件并且没有被逻辑删除的个数

var count = _myFileServiceRepository.FindAll(x => x.User.Id == userInfo.Id && x.IsDelete == false &&x.FileName.Contains(fileName)).Count();

fileName= count > 0 ? Path.GetFileNameWithoutExtension(fileName) + "(" + (count + 1).ToString() + ")" +Path.GetExtension(fileName) : fileName;

myFile= newMyFile()

{

FileMd5=strFileMd5,

ModifyDt=DateTime.Now,

IsDelete= false,

FileSize=buffer.Length,

FolderPath=filePath,

FileExt=Path.GetExtension(fileSavePath),

CreateDt=DateTime.Now,

FileName=fileName,

FileIcon=GetFileIcon(Path.GetExtension(fileSavePath)),

User=currentUser,

IsFolder= 0};//保存数据库

_myFileServiceRepository.Add(myFile);

}

}else{//新增文件信息

myFile = newMyFile()

{

FileMd5=strFileMd5,

ModifyDt=DateTime.Now,

IsDelete= false,

FileSize=buffer.Length,

FolderPath=filePath,

FileExt=Path.GetExtension(fileSavePath),

CreateDt=DateTime.Now,

FileName=fileName,

FileIcon=GetFileIcon(Path.GetExtension(fileSavePath)),

User=currentUser,

IsFolder= 0};//保存数据库

_myFileServiceRepository.Add(myFile);

}

_myFileServiceRepository.SaveChanges();string json = newJavaScriptSerializer().Serialize(myFile);

AlertMsg("上传成功", json);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值