Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
1

Ftp upload

09.05.2013, 22:29. Показов 1834. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь загрузить файл на сервер с ограничением скорости. Вот код:
C#
1
2
3
4
            Stream stream = request.GetRequestStream();
            Stream throttle = new ThrottledStream(stream, 10);
            throttle.Write(fileContents, 0, fileContents.Length);
            return true;
Файл грузится, но без ограничений.
ThrottledStream взял отсюда http://www.codeproject.com/Art... throttling

Добавлено через 1 час 27 минут
Прям загадка какая-то.
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
        public static bool FtpUpload(string uri, string file)
        {
            Stopwatch sw = new Stopwatch();
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri + file);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential("", "");
 
            byte[] fileContents = File.ReadAllBytes(file.Replace("|", null));
            File.Delete(file.Replace("|", null));
            request.ContentLength = fileContents.Length;
            Stream stream = request.GetRequestStream();
            long bytes = 5000;
            Stream throttle = new launcher.ThrottledStream(stream, bytes);
            sw.Start();
            stream.Write(fileContents, 0, fileContents.Length);
            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());
            sw.Reset();
            sw.Start();
            throttle.Write(fileContents, 0, fileContents.Length);
            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());
            return true;
        }
Добавил ещё 1 запись файла и Stopwatch, заливается столько, сколько нужно. Убираю запись опять на максимальной скорости закачка идёт. И ещё. В первый запуск sw 0 показывает.

Добавлено через 11 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            Stopwatch sw = new Stopwatch();
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri + file);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential("", "");
 
            byte[] fileContents = File.ReadAllBytes(file.Replace("|", null));
            File.Delete(file.Replace("|", null));
            request.ContentLength = fileContents.Length;
            Stream stream = request.GetRequestStream();
            long bytes = 5000;
            Stream throttle = new launcher.ThrottledStream(stream, bytes);
            sw.Start();
           // stream.Write(fileContents, 0, fileContents.Length);
            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());
            sw.Reset();
            sw.Start();
            throttle.Write(fileContents, 0, fileContents.Length);
            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());
            return true;
Работает.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            Stopwatch sw = new Stopwatch();
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri + file);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential("", "");
 
            byte[] fileContents = File.ReadAllBytes(file.Replace("|", null));
            File.Delete(file.Replace("|", null));
            request.ContentLength = fileContents.Length;
            Stream stream = request.GetRequestStream();
            long bytes = 5000;
            Stream throttle = new launcher.ThrottledStream(stream, bytes);
            throttle.Write(fileContents, 0, fileContents.Length);
            return true;
Не работает(((

Как с этим sw связан?

Добавлено через 10 минут
М... Какое-то странное решение нашлось.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Stopwatch sw = new Stopwatch();
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri + file);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential("", "");
 
            byte[] fileContents = File.ReadAllBytes(file.Replace("|", null));
            File.Delete(file.Replace("|", null));
            request.ContentLength = fileContents.Length;
            Stream stream = request.GetRequestStream();
            long bytes = 3000;
            Stream throttle = new launcher.ThrottledStream(stream, bytes);
            Thread.Sleep(10);
            throttle.Write(fileContents, 0, fileContents.Length);
            return true;
Буду признателен, если кто-то объяснит почему эта хрень работает только после слипа. Пробовал ещё Sleep(1), тоже не пашет.

Добавлено через 13 минут
Походу ни то, ни другое не пашет. Просто пауза выставляется а потом сразу весь файл заливается. хээээлп(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2013, 22:29
Ответы с готовыми решениями:

WebRequest. POST. UPLOAD FILE.
Добрый времени суток. Задача состоит в том, чтобы скачать файл с определённого урл, предварительно...

Upload файлов через webBrowser
Я уже выцепил элемент вида <input type="file" name="file"><br> Как HtmlElement, у меня есть адрес...

Требуется Upload файл на веб-сервер
Я работаю с Memsource cloud API. http://wiki.memsource.com/wiki/Memsource_API Мне требуется...

Прогресс для Upload файла на сервер используя HttpClient
Подскажите пожалуйста, как можно сделать прогресс Upload файла на сервер с помощью HttpClient? В...

4
21 / 20 / 3
Регистрация: 08.12.2012
Сообщений: 92
10.05.2013, 10:06 2
Может, так?
C#
1
2
3
4
5
6
7
8
9
10
11
            Stream throttle = new launcher.ThrottledStream(stream, bytes);
            int const1 = 10;
            int ii = bytes.Length-(int)(bytes.Length/const1);
            for(int i = 0; i < ii;i+=const1;)
            {
                Thread.Sleep(10);
                throttle.Write(fileContents, i, i+const1);
            }
            Thread.Sleep(10);
            throttle.Write(fileContents, ii, bytes.Length-1);
            return true;
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
10.05.2013, 15:55  [ТС] 3
Да ну этот ThrottledStream. Я уже думал может с фтп проблема или ещё чем. Создал новый проект и просто локально копировал файлы. Он отсчитывает время на копирование и потом сразу его на максимальной скорости начинает.

Добавлено через 1 час 54 минуты
Написал сам отправку файла...
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
        {
            int k = 0;
            int l = 0;
            int g = 0;
            int speed = 5 *1024*1024;
            Stream str = File.OpenWrite("txt.txt");
            byte[] buff = File.ReadAllBytes("ex.rar");
            byte[][] bufff = new byte[buff.Length / speed + 1][];
            for (l = 0; l < buff.Length / speed; l++)
            {
                byte[] temp = new byte[speed];
                for (g = 0; g < speed; g++)
                {                    
                    temp[g] = buff[l * speed + g];
                }
                bufff[l] = temp;
            }
            byte[] temp2 = new byte[buff.Length - (l * speed)];
            for (g = 0; g < buff.Length - (l * speed); g++)
            {
                temp2[g] = buff[l * speed + g];
            }
            bufff[bufff.Length - 1] = temp2;
            for (k = 0; k < buff.Length / speed; k++)
            {
                str.Write(bufff[k], 0, speed);
                Thread.Sleep(1000);
            }
            str.Write(bufff[bufff.Length - 1], 0, buff.Length - k * speed);
            str.Close();
        }
Чувствую много косяков, буду признателен если кто поможет привести в порядок функцию.
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
10.05.2013, 16:21  [ТС] 4
Изменил public override void Write(byte[] buff, int offset, int count). Теперь работает нормально.
C#
1
2
3
            ThrottledStream str = new ThrottledStream(request.GetRequestStream(), 5 * 1024);
            str.Write(buff, 0, buff.Length);
            str.Close();
Вот пример. При вызове ThrottledStream(Stream stream); или ThrottledStream(Stream stream, 0); ограничения не будет.
Вложения
Тип файла: rar ThrottledStream.rar (2.8 Кб, 8 просмотров)
0
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
11.05.2013, 18:19  [ТС] 5
Товарищи, мой скрипт ужасно грузит проц. Нету ли более рациональной альтернативы разбиения буфера?

Добавлено через 6 часов 9 минут
Блин 150 просмотров и ни 1 человек не сказал, что вместо разбивки буфера можно offset задать. Я вообще думал что offset будет на место в стриме влиять...
0
11.05.2013, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2013, 18:19
Помогаю со студенческими работами здесь

Upload to OneDrive: ошибка 404 при загрузке файла на сервер
День добрый. На сервере OneDrive (Microsoft) имеется некий файл. Этот файл открыт для общего...

Upload файлов из WinForms апликации на Web сервер
Есть WinForms апликация, которая, между всем прочим, должна аплоадить файлы на Web сервер по HTTP...

mySmartUpload.Upload
Всем привет. Решил закачать файл на сервер - около 100 мб. Скачал компонент, зарегистрировал в...

mySmartUpload.Upload и размер
Всем привет. Похоже с этим самым смартом немного желаюших работать, но вопрос всё-же задам. Вроде...


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

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