Как загрузить определенные папки с системой входа в ASP.NET? - PullRequest
1 голос
/ 11 июля 2011

Я создам ASP.NET веб-приложение, подобное этому;

  1. Пользователи могут войти в свои собственные username и password.
  2. Пользователи могут подать upload своисобственную папку (я определяю папки вручную), а также они могут видеть все файлы на своей странице и загружать их.

Я думаю, что могу использовать такую ​​архитектуру;

  1. Я должен использовать ASP.NET Login Controls, мы все согласны с этим.Но я также должен использовать C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regsql.exe и ASP.NET Web site Administration Tool?Что именно делает aspnet_regsql.exe?Что делает Administration Tool?Они (элементы управления входом + aspnet_regsql.exe + инструмент администрирования) нужны только мне для создания системы входа пользователя?
  2. Для загрузки файла я думаю использовать File Upload контроль.Тогда, например;если у меня есть пользователь "A", папка должна выглядеть как http://ourserver/A.Я понятия не имею, как я могу загрузить файл в определенную папку.И как я могу показать пользователям свои загруженные файлы?(Также пользователи должны загрузить их). Есть ли какой-нибудь элемент управления asp.net для этого?

РЕДАКТИРОВАТЬ : Я предпочитаю пошаговое объяснение, а не давать некоторый код.Я также хочу понять, что делают эти приложения?

Ответы [ 5 ]

5 голосов
/ 17 июля 2011

1) Если вы запустите инструмент regsql, он откроет экран с запросом некоторой информации sql, а затем создаст набор таблиц относительно членства и т. Д. Если вы запустите базовое приложение MVC 3, оно поставляется с контроллером учетных записейВойти, выйти из системы, забыли пароль, все подключено.Это говорит с этой базой данных.Ваша альтернатива - создать собственного провайдера членства, для этого есть множество учебных пособий.Вы можете контролировать больше вещей с помощью пользовательского поставщика членства, но это немного больше работы.

2) Пример кода AmRans идеально подходит для сохранения самого файла.Что касается папки для данного пользователя, то я, вероятно, настрою базовый каталог в вашем файле web.config, затем;

if( Directory.Create( Path.Combine( baseDirectory, UserDirectory)).Exists) {

}

, хотя, если вы используете .NET 2, то это может остаться;

string savePath = Path.Combine( baseDirectory, UserDirectory);

Directory.Create( savePath );

if( Directory.Exists( savePath)) {
}

Для просмотра этих файлов, если пользователь вошел в систему, вы можете запросить каталог сохранения + имя пользователя и вывести список всех файлов в нем.

1 голос
/ 22 июля 2011

Прежде всего, прежде чем перейти к тому, какие элементы управления использовать, будь то проект Website или приложение ASP.Net MVC3, я думаю, что очень важно понять, каким должен быть ваш основной дизайн.Реализация графического аспекта входа в систему проста, важна его внутренняя часть.

Как вы аутентифицируете пользователей?Какую роль они должны играть (только для чтения, только для записи, для чтения / записи и т. Д.).Какой режим вы должны выбрать и как настроить свой сайт для принятия одной из этих форм аутентификации.Если у вас есть понимание этого, вы можете пропустить это, в противном случае я бы предложил прочитать здесь: Аутентификация и авторизация ASP.NET и это: Членство в ASP.NET 2.0, Роли, Аутентификация по формам,и ресурсы безопасности

Теперь часть загрузки файлов и управления ими - ну, хотя интересно делать что-то самостоятельно с точки зрения обучения, я также верю в то, что не изобретать велосипед (если это соответствует вашим целям)конечно).Есть хорошие проекты с открытым исходным кодом, которые вы можете извлечь из этого:

http://www.codeproject.com/KB/aspnet/WebFileManager.aspx (созданный Джеффом Этвудом и имеющий хорошее объяснение)

http://www.filemanager.3ntar.net/

http://www.ajaxfilebrowser.com/

Надеюсь, это поможет.

1 голос
/ 11 июля 2011

См. Приведенный ниже код, не точный, но, возможно, вам поможет. Здесь UploadTypes - это пользовательское перечисление, а userId - текущий пользователь, вошедший в систему, id (первичный ключ таблицы или любая уникальная вещь) с именем элемента управления, переданным из интерфейса.

  /// <summary>
        /// returns the virtual application path of uploaded file.
        /// </summary>
        /// <param name="fu"></param>
        /// <param name="uploadType"></param>
        /// <returns></returns>
        public static string GetAppFileUploadPath(FileUpload fu, UploadTypes uploadType, int userId)
        {
           var path =  string.Format("~/Images/no.gif"); 

            if (fu.HasFile)
            {
                if (fu.FileContent.Length > 0)
                {
                    var filename = Path.GetFileNameWithoutExtension(fu.PostedFile.FileName);
                    var extension = Path.GetExtension(fu.PostedFile.FileName);
                    switch (uploadType)
                    {
                        case UploadTypes.Images:
                            _validExtensions = new List<string> 
                                                {
                                                    ".bmp", ".jpg",".jpeg",".gif",".png" 
                                                };

                            if (_validExtensions.Contains(extension.ToLower()))
                            {
                                var newFileName = string.Format("{0}_{1}_{2}{3}", filename, userId, Guid.NewGuid().ToString().Substring(0, 5), extension);
                                var serverUploadPath = string.Format("{0}/VirtualOffice/Uploads/ProductImage/{1}", HttpRuntime.AppDomainAppPath, newFileName);
                                path = string.Format("~/VirtualOffice/Uploads/ProductImage/{0}", newFileName);
                                fu.SaveAs(serverUploadPath);

                            }
                            else
                            {
                                Common.ShowMessage("Only image files allowed, bmp, jpg , gif or png.");
                            }
                            break;
                        case UploadTypes.Documents:
                            _validExtensions = new List<string> 
                                                {
                                                    ".doc", ".rtf",".docx",".pdf",".txt" 
                                                };
                            if (_validExtensions.Contains(extension.ToLower()))
                            {
                                var newFileName = string.Format("{0}_{1}_{2}{3}", filename, userId, Guid.NewGuid().ToString().Substring(0, 5), extension);
                                var serverUploadPath = string.Format("{0}/VirtualOffice/Uploads/ProductImage/{1}", HttpRuntime.AppDomainAppPath, newFileName);
                                fu.SaveAs(serverUploadPath);
                                path = string.Format("~/VirtualOffice/Uploads/ProductImage/{0}", newFileName);
                            }
                            else
                            {
                                Common.ShowMessage("Only valid text files allowed, doc, docx ,rtf, pdf or txt.");

                            }
                            break;
                    }

                }
            }

            return path;

        }

Это мой пользовательский код загрузки файла, который позволяет использовать изображение или документ в соответствии со сценарием.

0 голосов
/ 21 июля 2011

Обратите внимание, что в целях безопасности вам может потребоваться предоставить права на запись NETWORK SERVICE на вашем сервере для каждой папки, в которую вы хотите загрузить данные. Поэтому я рекомендую вам создать папку в корневом каталоге. или где угодно и предоставьте доступ для записи в эту папку, скажем FolderA. Таким образом, любая дочерняя папка будет иметь те же права.

Кроме того, существует множество элементов управления, которые могут обрабатывать файлы из Интернета. К сожалению, большинство из них чего-то стоят (если вы хотите одну конюшню и которая отлично работает). Тот, который мы купили и отлично работает для нас, это этот (CuteWebUI.AjaxUploader) . Он позволяет вам указывать сразу несколько файлов или нет, использовать Flash, IFrame или AJAX по своему усмотрению, автоматически сохранять временные файлы и т. Д.

Удачи!

Примечание: я говорю по-французски, извините за мой английский

0 голосов
/ 11 июля 2011

При загрузке файла вы можете проверить пользователя после входа в систему, чем проверить, существует ли папка или нет, с помощью:

Directory.Exist("FolderPath")

Если она существует, загрузите эту папку, в противном случае вы можете создать папку с помощью

Directory.Create("Folder Path and Name");

Затем загрузите файл в эту папку

...