[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);
}
}