Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
9 / 9 / 0
Регистрация: 14.04.2015
Сообщений: 85
1

Загрузка и скачивание файлов в Web API, хранение их в filetables

19.08.2016, 15:44. Показов 7852. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: нужно для windows-приложения (клиента) обеспечить возможность хранения файлов на сервере и скачивания их оттуда. Предполагаемые объёмы хранения -- около 10 тысяч. Вместе с файлами нужно передавать дополнительную информацию о них и отображать прогресс загрузки.

Текущее решение:
На стороне сервера создан контроллер MVC:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 public class DocumentsController : Controller
    {
        private WebApiContext db = new WebApiContext();
 
 
        // GET: Documents
        public ActionResult Index(string hashName)
        {
            var document = db.DocumentsInfoes.First(p => p.HashName == hashName);
 
            Response.ContentType = "APPLICATION/OCTET-STREAM";
            // Записываем настоящее имя файла.
            string Header = "Attachment; Filename=" + document.Name;
            Response.AppendHeader("Content-Disposition", Header);
            // Указываем путь к файлу.
            System.IO.FileInfo Dfile = new System.IO.FileInfo(Server.MapPath("Files/" + hashName));
            Response.WriteFile(Dfile.FullName);
            //Don't forget to add the following line
            Response.End();
 
 
            return View();
        }
 
 
        // POST: Documents/Create
        [HttpPost]
        public ActionResult Index(bool isShared, string group, string login)
        {
            var date = DateTime.Now;
 
            foreach (string file in Request.Files)
            {
                var upload = Request.Files[file];
                if (upload != null)
                {
                    // получаем имя файла
                    string fileName = System.IO.Path.GetFileName(upload.FileName);
                    var hashName = cryptWord(fileName + "gh4@f63J23" + date);
 
 
                    var documentInfo = db.DocumentsInfoes.Add(new DocumentsInfo
                    {
                        Login = login,
                        Date = date,
                        Name = fileName,
                        IsShared = isShared,
                        Group = group,
                        HashName = hashName,
                    });
 
 
                    db.SaveChanges();
 
 
                    // сохраняем файл в папку Files в проекте
                    upload.SaveAs(Server.MapPath("~/Files/" + hashName));
                }
            }
            return View();
        }
2 метода: для загрузки и скачивания. Принимают также дополнительную информацию о файлах.

На стороне клиента:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        public void UploadDocument(string filePath, UploadDelegate uploadDelegate, bool isShared)
        {
            User user;
            GetUserInfo(out user);
 
            using (WebClient webClient = new WebClient())
            {
                Uri uri = new Uri(String.Format("{0}/Documents?isShared={1}&group={2}&login={3}", _appPath, isShared, user.Group, user.Login));
                webClient.UploadFileAsync(uri, "post", filePath);
                webClient.UploadProgressChanged += new UploadProgressChangedEventHandler(uploadDelegate);
            }
        }
 
 
        public void DownloadDocument(string filePath, DownloadDelegate downloadDelegate, string name, string hashName)
        {
            using (WebClient webClient = new WebClient())
            {
                Uri uri = new Uri(String.Format("{0}/Documents?hashName={1}", _appPath, hashName));
                webClient.DownloadFileAsync(uri, filePath + name);
                webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloadDelegate);
            }
        }
Используется WebClient, т.к. нужно показывать прогресс.

Также создан контроллер Web API с атрибутом Authorize, позволяющий получать список файлов и удалять их.

Текущие проблемы:
  1. Методы загрузки и скачивания не защищены, в отличии от методов Web API.
  2. Не удалось передать ключ доступа для контроллера MVC, используя WebClient. HttpClient не подходит, т.к. опять же нет прогресса загрузки, что необходимо.

Предполагаемое решение:
Использовать по-прежнему WebClient для загрузки, но уже передавая ключ доступа на сервер к Web API контроллеру. И (опционально) использовать Filetables.

Заранее спасибо за ваши ответы и уделённое время.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2016, 15:44
Ответы с готовыми решениями:

Загрузка и скачивание файлов
Привет! Помогите кто-нибудь, пожалуйста! Мне нужна загрузка и скачивание файлов с сайта, как здесь...

Загрузка и скачивание файлов
Здравствуйте. Столкнулся с проблемой мне нужно загрузить файлы на сервер в так называемое хранилище...

Загрузка файлов по вк api
Привет форумчане! Нужна помощь с переделывание JS на php или что подобное для загрузки... Вот код...

2 сервиса (WCF Web API и ASP.NET Web API) на одном хосте
Есть БД с юзерами Есть консольное приложение (OWIN selfhost) с контроллером ImportController :...

1
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
15.12.2020, 05:26 2
Как-то Вы слишком заранее поблагодарили))
Ну или, возможно, дело в том, что вопрос так и не был озвучен)

В любом случае, случайно наткнулся на Вашу тему и хотел бы узнать, к чему в итоге Вы пришли при работе в данном направлении?)
На данный момент сам задался вопросом как правильно было бы организовать работу клиент-серверного приложения, и был бы очень признателен за совет)
В частности на что стоит обратить внимание при организации загрузки-выгрузки файлов на сервер, какие могут быть подводные камни?
0
15.12.2020, 05:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2020, 05:26
Помогаю со студенческими работами здесь

Хранение файлов и файловый менеджер в файле(листе) Excel, Бинарное хранение данных в CustomProperty листа Excel
Всем привет! Хочу поделится наработками, которые получились в процессе реализации своих задач. ...

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

Простой клиент, скачивание данных, загрузка
Написал простой "клиент" который скачивает с хостинга данные а сервер их туда загружает. Дело в том...

Загрузка и скачивание данных в облачное хранилище
Здравствуйте. Я в этом деле новичок, так что не судите строго. Пытаюсь разобраться. В процессе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru