public ActionResult Upload(Models.UploadedFileModel fileinfo)
        {
            if (ModelState.IsValid)
            {
                //получаем информацию о родительском каталоге
                FileEntity ParentFolder = Logic.GetFileById(fileinfo.ParentId);
                
                //создаём сущность файла и заполняем поля
                string Extension = "";
                string filename = System.IO.Path.GetFileName(fileinfo.UploadedFile.FileName);
                if (filename.Contains('.'))
                    Extension = filename.Substring(filename.LastIndexOf('.'));
                FileEntity NewFile = new FileEntity(filename,
                    ParentFolder.Owner, Extension,
                    fileinfo.UploadedFile.ContentLength, DateTime.Now, 0,
                    ParentFolder.FullName + '\\' + filename, AccessType.Private, 
                    fileinfo.UploadedFile.ContentType);

                //сохраняем файл, если не возникает конфликтов с именем
                try
                {
                    Logic.UploadFile(ParentFolder.Id, NewFile);
                    fileinfo.UploadedFile.SaveAs(Logic.GetStorageLocation() + '\\' + ParentFolder.FullName + '\\' 
                        + filename);
                    return Redirect("~/Account/Storage?id=" + ParentFolder.Id);
                }
                catch (ArgumentException e)
                {
                    //иначе возвращаем ошибку
                    ModelState.AddModelError(e.ParamName, e.Message);
                }
            }
            return View(fileinfo);
        }
Esempio n. 2
0
 /// <summary>
 /// Метода RemoveFile удаляет file из файловой системы
 /// </summary>
 /// <param name="file"></param>
 public void RemoveFile(FileEntity file)
 {
     if (file.Extension == "folder")
         new DirectoryInfo(Storage.FullName + '\\' + file.FullName).Delete();
     else
         new FileInfo(Storage.FullName + '\\' + file.FullName).Delete();
     return;
 }
Esempio n. 3
0
 public FileModel(FileEntity file)
 {
     ID = file.Id;
     Name = file.Name;
     OwnerName = file.Owner.Name;
     Extension = file.Extension;
     FullName = file.FullName;
     UploadDate = file.UploadDate;
     Access = file.Access;
     Size = file.Size;
     Downloads = file.Downloads;
 }
Esempio n. 4
0
        /// <summary>
        /// Метод AddFile добавляет информацию о файле в базу данных
        /// </summary>
        /// <param name="parid"></param>
        /// <param name="file"></param>ww
        /// <returns></returns>
        public bool AddFile(int parid, FileEntity file)
        {
            bool r;
            if (GetFileByFullName(file.FullName) != null)
                throw new ArgumentException("Файл с таким именем уже существует.", "UploadedFile");
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("INSERT INTO MegaFileStorage.Files (OwnerID, FileName, Extension, "
                    + "Size, UploadDate, Downloads, FullName, AccessType, ContentType) VALUES(@oid, @n, @e, @s, @ud, "
                    + "@d, @fn, @at, @ct)");
                command.Connection = connection;
                command.Parameters.AddWithValue("@oid", file.Owner.ID);
                command.Parameters.AddWithValue("@n", file.Name);
                command.Parameters.AddWithValue("@e", file.Extension);
                command.Parameters.AddWithValue("@s", file.Size);
                command.Parameters.AddWithValue("@ud", file.UploadDate);
                command.Parameters.AddWithValue("@d", file.Downloads);
                command.Parameters.AddWithValue("@fn", file.FullName);
                command.Parameters.AddWithValue("@at", file.Access);
                command.Parameters.AddWithValue("@ct", file.ContentType);

                connection.Open();

                r = command.ExecuteNonQuery() == 1;
                if (!r) return r;
            }

            int chid = GetFileByFullName(file.FullName).Id;

            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("INSERT INTO MegaFileStorage.Folders (ChID, ParID) VALUES(@c, @p)");
                command.Connection = connection;
                command.Parameters.AddWithValue("@c", chid);
                command.Parameters.AddWithValue("@p", parid);

                connection.Open();

                return command.ExecuteNonQuery() == 1;
            }
        }
Esempio n. 5
0
 public static bool UploadFile(int rootid, FileEntity newfile)
 {
     Data.AddFile(rootid, newfile);
     Data.ChangeDirSize(rootid, (int)newfile.Size);
     return false;
 }
Esempio n. 6
0
 public static bool CreateSubfolder(FileEntity root, string name)
 {
     Storage.CreateFolder(root, name);
     return Data.CreateSubFolder(root, name);
 }
Esempio n. 7
0
 public static void RemoveFile(FileEntity file)
 {
     int rootid = GetParentId(file.Id);
     if (file.Extension == "folder")
     {
         foreach (FileEntity f in GetFiles(file.Id))
             RemoveFile(f);
         foreach (FileEntity f in GetSubfolders(file.Id))
             RemoveFile(f);
     }
     Data.RemoveFile(file.Id);
     if (rootid != -1)
         Data.ChangeDirSize(rootid, -(int)file.Size);
     Storage.RemoveFile(file);
     return;
 }
Esempio n. 8
0
 public static bool ChangeAccess(FileEntity file, int access)
 {
     return Data.ChangeAccess(file, (AccessType)access);
 }
Esempio n. 9
0
        /// <summary>
        /// Метод ChangeAccess изменяет тип доступа файла file на accesstype
        /// </summary>
        /// <param name="file"></param>
        /// <param name="accesstype"></param>
        /// <returns></returns>
        public bool ChangeAccess(FileEntity file, AccessType accesstype)
        {
            bool r;
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("UPDATE MegaFileStorage.Files SET AccessType = @at WHERE "
                    + "FileID = @fid");
                command.Connection = connection;
                command.Parameters.AddWithValue("@at", (int)accesstype);
                command.Parameters.AddWithValue("@fid", file.Id);

                connection.Open();

                r = command.ExecuteNonQuery() == 1;
                if (!r) return r;
                
                switch (accesstype)
                {
                    case AccessType.Private:
                    case AccessType.Public:
                        command.CommandText = "DELETE FROM MegaFileStorage.Access WHERE FileID = @fid";

                        r = command.ExecuteNonQuery() == 1;
                        break;
                    case AccessType.Limited:
                        command.CommandText = "INSERT INTO MegaFileStorage.Access (UserID, FileID) VALUES(@uid, @fid)";
                        command.Parameters.AddWithValue("@uid", file.Owner.ID);

                        r = command.ExecuteNonQuery() == 1;
                        break;
                }
            }
            return r;
        }
Esempio n. 10
0
        /// <summary>
        /// Если параметр f - истина, то метод GetChildren возвращает все подкаталоги каталога с идентификатором id
        /// В противном случае вернём все содержащиеся в нём файлы
        /// </summary>
        /// <param name="id"></param>
        /// <param name="f"></param>
        /// <returns></returns>
        public IEnumerable<FileEntity> GetChildren(int id, bool f)
        {
            List<int> ids = new List<int>();
            List<FileEntity> files = new List<FileEntity>();
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("SELECT ChID FROM MegaFileStorage.Folders WHERE ParID=@id");
                command.Connection = connection;
                command.Parameters.AddWithValue("@id", id);

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                        ids.Add(reader.GetInt32(0));
                }

                foreach(int i in ids)
                {
                    if(f)
                    {
                        command.CommandText = "SELECT OwnerID, FileName, UploadDate, FullName, AccessType, Size FROM "
                            + "MegaFileStorage.Files WHERE FileID = @fid AND Extension = 'folder'";

                        command.Parameters.AddWithValue("@fid", i);
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                FileEntity folder = new FileEntity();
                                folder.Id = i;
                                folder.Extension = "folder";
                                folder.Owner = new User() { ID = reader.GetInt32(0) };
                                folder.Name = reader.GetString(1).Trim();
                                folder.UploadDate = reader.GetDateTime(2);
                                folder.FullName = reader.GetString(3).Trim();
                                switch (reader.GetInt32(4))
                                {
                                    case 0:
                                        folder.Access = AccessType.Private;
                                        break;
                                    case 1:
                                        folder.Access = AccessType.Public;
                                        break;
                                    default:
                                        folder.Access = AccessType.Limited;
                                        break;
                                }
                                folder.Size = reader.GetInt32(5);
                                files.Add(folder);
                            }
                        }
                    }
                    else
                    {
                        command.CommandText = "SELECT OwnerID, FileName, Extension, Size, UploadDate, Downloads, "
                            + "FullName, AccessType FROM MegaFileStorage.Files WHERE FileID = @fid AND NOT Extension "
                            + "= 'folder'";

                        command.Parameters.AddWithValue("@fid", i);
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                FileEntity file = new FileEntity();
                                file.Id = i;
                                file.Owner = new User() { ID = reader.GetInt32(0) };
                                file.Name = reader.GetString(1).Trim();
                                file.Extension = reader.GetString(2).Trim();
                                file.Size = reader.GetInt32(3);
                                file.UploadDate = reader.GetDateTime(4);
                                file.Downloads = reader.GetInt32(5);
                                file.FullName = reader.GetString(6).Trim();
                                switch (reader.GetInt32(7))
                                {
                                    case 0:
                                        file.Access = AccessType.Private;
                                        break;
                                    case 1:
                                        file.Access = AccessType.Public;
                                        break;
                                    default:
                                        file.Access = AccessType.Limited;
                                        break;
                                }
                                files.Add(file);
                            }
                        }
                    }

                    command.Parameters.Clear();
                }

                for (int i = 0; i < files.Count; i++)
                    files[i].Owner = GetUserById(files[i].Owner.ID);
            }
            return files;
        }
Esempio n. 11
0
        /// <summary>
        /// Метод CreateSubFolder добавляет в базу данных информацию о подкаталоге каталога root с именем name
        /// </summary>
        /// <param name="root"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public bool CreateSubFolder(FileEntity root, string name)
        {
            if (GetFileId(root.FullName + '\\' + name) != -1)
                throw new ArgumentException("Существующее имя каталога.", "Name");
            bool r = true;
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("INSERT INTO MegaFileStorage.Files (OwnerID, FileName, Extension,"
                    + " UploadDate, FullName, AccessType, Size) VALUES(@oid, @n, @e, @ud, @fn, @at, @s)");
                command.Connection = connection;
                command.Parameters.AddWithValue("@oid", root.Owner.ID);
                command.Parameters.AddWithValue("@n", name);
                command.Parameters.AddWithValue("@e", "folder");
                command.Parameters.AddWithValue("@ud", DateTime.Now);
                command.Parameters.AddWithValue("@fn", root.FullName + '\\' + name);
                command.Parameters.AddWithValue("@at", 0);
                command.Parameters.AddWithValue("@s", 0);

                connection.Open();

                r &= command.ExecuteNonQuery() == 1;
            }

            if (!r) return r;

            int chid = GetFileId(root.FullName + '\\' + name);

            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("INSERT INTO MegaFileStorage.Folders (ChID, ParID) VALUES(@cd, @pd)");
                command.Connection = connection;
                command.Parameters.AddWithValue("@cd", chid);
                command.Parameters.AddWithValue("@pd", root.Id);

                connection.Open();

                r &= command.ExecuteNonQuery() == 1;
            }

            return r;
        }
Esempio n. 12
0
        /// <summary>
        /// Метод GetFileByFullName возвращает файл, полное имя которого соотвествует filename
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public FileEntity GetFileByFullName(string filename)
        {
            FileEntity file = null;
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("SELECT FileID, OwnerID, [FileName], Extension, Size, UploadDate, "
                    + "Downloads, FullName, AccessType FROM MegaFileStorage.Files WHERE FullName = @fn");
                command.Connection = connection;
                command.Parameters.AddWithValue("@fn", filename);

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if(reader.Read())
                    {
                        file = new FileEntity();
                        file.Id = reader.GetInt32(0);
                        file.Owner = new User { ID = reader.GetInt32(1) };
                        file.Name = reader.GetString(2).Trim();
                        file.Extension = reader.GetString(3).Trim();
                        if (!reader.IsDBNull(4))
                            file.Size = reader.GetInt32(4);
                        file.UploadDate = reader.GetDateTime(5);
                        if (!reader.IsDBNull(6))
                            file.Downloads = reader.GetInt32(6);
                        file.FullName = reader.GetString(7).Trim();
                        switch (reader.GetInt32(8))
                        {
                            case 0:
                                file.Access = AccessType.Private;
                                break;
                            case 1:
                                file.Access = AccessType.Public;
                                break;
                            default:
                                file.Access = AccessType.Limited;
                                break;
                        }
                    }
                }
            }
            return file;
        }
Esempio n. 13
0
        /// <summary>
        /// Метод GetAllowedUsers возвращает всех пользователей, которые имеют доступ к файлу file
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public IEnumerable<User> GetAllowedUsers(FileEntity file)
        {
            List<User> users = new List<User>();
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("SELECT UserID FROM MegaFileStorage.Access WHERE FileID = @fid");
                command.Connection = connection;
                command.Parameters.AddWithValue("@fid", file.Id);

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.HasRows)
                        while (reader.Read())
                            users.Add(GetUserById(reader.GetInt32(0)));
                }
            }
            return users;
        }
Esempio n. 14
0
        /// <summary>
        /// Метод GetAllFilesOwnedByUser возвращает все файлы, которые загрузил пользователь user
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public IEnumerable<FileEntity> GetAllFilesOwnedByUser(User user)
        {
            List<FileEntity> files = new List<FileEntity>();
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("SELECT FileID, [FileName], Extension, Size, UploadDate, "
                    + "Downloads, FullName, AccessType, ContentType WHERE OwnerID = @oid");
                command.Connection = connection;
                command.Parameters.AddWithValue("@oid", user.ID);

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        FileEntity file = new FileEntity();
                        file.Id = reader.GetInt32(0);
                        file.Owner = user;
                        file.Name = reader.GetString(1).Trim();
                        file.Extension = reader.GetString(2).Trim();
                        if(!reader.IsDBNull(3))
                            file.Size = reader.GetInt32(3);
                        file.UploadDate = reader.GetDateTime(4);
                        if (!reader.IsDBNull(5))
                            file.Downloads = reader.GetInt32(5);
                        file.FullName = reader.GetString(6).Trim();
                        switch (reader.GetInt32(7))
                        {
                            case 0:
                                file.Access = AccessType.Private;
                                break;
                            case 1:
                                file.Access = AccessType.Public;
                                break;
                            default:
                                file.Access = AccessType.Limited;
                                break;
                        }
                        if (!reader.IsDBNull(8))
                            file.ContentType = reader.GetString(8);
                    }
                }

                for (int i = 0; i < files.Count; i++)
                    files[i].Owner = GetUserById(files[i].Owner.ID);
            }
            return files;
        }
Esempio n. 15
0
        /// <summary>
        /// Метод GetAllFiles возвращает все файлы, имеющиеся в базе данных
        /// </summary>
        /// <returns></returns>
        public IEnumerable<FileEntity> GetAllFiles()
        {
            List<FileEntity> files = new List<FileEntity>();
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand("SELECT FileID, OwnerID, [FileName], Extension, Size, UploadDate, "
                    + "Downloads, FullName, AccessType, ContentType FROM MegaFileStorage.Files");
                command.Connection = connection;

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while(reader.Read())
                    {
                        FileEntity file = new FileEntity();
                        file.Id = reader.GetInt32(0);
                        file.Owner = new User();
                        file.Owner.ID = reader.GetInt32(1);
                        file.Name = reader.GetString(2).Trim();
                        file.Extension = reader.GetString(3).Trim();
                        if (!reader.IsDBNull(4))
                            file.Size = reader.GetInt32(4);
                        file.UploadDate = reader.GetDateTime(5);
                        if (!reader.IsDBNull(6))
                            file.Downloads = reader.GetInt32(6);
                        file.FullName = reader.GetString(7).Trim();
                        switch (reader.GetInt32(8))
                        {
                            case 0:
                                file.Access = AccessType.Private;
                                break;
                            case 1:
                                file.Access = AccessType.Public;
                                break;
                            default:
                                file.Access = AccessType.Limited;
                                break;
                        }
                        if (!reader.IsDBNull(9))
                            file.ContentType = reader.GetString(9);

                        files.Add(file);
                    }
                }

                for(int i = 0; i < files.Count; i++)
                    files[i].Owner = GetUserById(files[i].Owner.ID);
            }
            return files;
        }
Esempio n. 16
0
 /// <summary>
 /// Метод CreateFolder создаёт подкаталог в каталоге root с именем foldername
 /// </summary>
 /// <param name="root"></param>
 /// <param name="foldername"></param>
 public void CreateFolder(FileEntity root, string foldername)
 {
     Storage.CreateSubdirectory(root.FullName + '\\' + foldername);
 }