19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 14:54
Студворк — интернет-сервис помощи студентам
И помегабайтно (0-1048575 , 1048576-2097151 и т.д. т.п.) пробовал куски запрашивать? Все равно принуждает к кускам по 5мб?
Ну и самый жестокий вариант теста ГИСа, пойти прямо по их примеру, выгружать блоками по 1000 байт ( 0-999 )? =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2016, 14:54
Ответы с готовыми решениями:

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и umatkot, Берёмся за реализацию всего этого...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте. Подскажите, пожалуйста: делаю getState...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке...

400
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 14:59
Вот тебе все куски:

это куски одного зип архива -1 байт((((
Вложения
Тип файла: zip part_1.zip (5.00 Мб, 25 просмотров)
Тип файла: zip part_2.zip (5.00 Мб, 14 просмотров)
Тип файла: zip part_3.zip (5.00 Мб, 15 просмотров)
Тип файла: zip part_4.zip (425.9 Кб, 13 просмотров)
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 15:02
nORb Dragon, Яж те писал... первый кусок статично должен быть равен диапазону 0-5242880 не 0-5242879 не 0-5242860 вот так-то(((
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 15:08
Не, я имею в виду вообще тупо задать рендж даже не по 5 мб (5242880 или 5242879), а мелкие пакеты размерностью вплоть до 1000 байт.

ps: щаз пощупаем-с кусочки... если негодяи по работе не начнут меня дергать, заставлять делать работу и манить запахом зарплаты... х.Х
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 15:17
nORb Dragon, XD))) Ну блин как бы тебе объяснить... сервак файлит
Дополнительные сведения: Запрошенное значение "Incorrect range" не найдено.

Добавлено через 1 минуту
0-999
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:13
Нормальные кусочки... За исключением последнего. Собрал из кусочков файл, сравнил побайтно. Последнего байта нет в последнем куске, да. В итоге на рендж можно забить, имхо, проблема не в нем. Иначе бы... Хотяя...
В твоем коде я не вижу, как именно ты используешь этот класс. Там только объявление класса, без объявления объекта и его использования. Хотя возможно c# сильно отличается от других языков, и мой глаз не замечает этих строк. %)
Меня интересует цикл (?), где ты вызываешь метод
C#
1
HttpRequestMessage RequestUnitDownLoading(XDir dir, Guid fileId, long? form, long? to)
Как у тебя организована передача в метод параметров диапазона (form, to)? Особенно касаемо "последнего куска". Или там универсальный алгоритм? Можно на этот кусок кода посмотреть?

Кстати, у тебя производится анализ значения поля Content-length: из ответа с сервера? В ответе с "последним куском" что в этом поле написано? 436083 или 436084 байта?
Любопытно, что у изначального файла-архива три последних байта - #00. Не хочется подозревать, что кто-то воспринимает "лишние #00" в качестве "конца файла".
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:18
nORb Dragon, Увот он -
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
       public void ExportFile(Root.XDir dir, Guid fileGuid)
        {
            var engi = new Enginer(dir) {SessionId = fileGuid.ToString()};
 
            var  res = engi.RequestLoadingUnitInfo();
            var mxx = engi.SendRequest(res).ResultEnginer<ResponseInfoModel>();
 
            if (mxx.XError != null)
            {
                return;
            }
 
            if (mxx.RFileParts.Length > 1)
            {
                var mod = (int)(mxx.RFileLength % SignBinds.maxPartSize);
                var size = 0;
                var par = new List<ExplodUnit>();
                var tox = 0;
                foreach (var parts in mxx.RFileParts)
                {
                    //size == 0 ? (int)SignBinds.maxPartSize : size ==((int)SignBinds.maxPartSize - 1) ? (size + (int)SignBinds.maxPartSize)+1:
 
                    var ss = (size + (int)SignBinds.maxPartSize);
 
 
                    tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength - 1 : ss;
                    var toy = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength : ss;
 
 
                    var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, tox);
                    var nmmx = engi.SendRequest(dowx).ResultEnginer<ResponseDownloadModel>();
 
                    // Open file for reading
                    System.IO.FileStream _FileStream =
                       new System.IO.FileStream($"D:\\part_{parts}", System.IO.FileMode.Create,
                                                System.IO.FileAccess.Write);
                    // Writes a block of bytes to this stream using data from
                    // a byte array.
                    _FileStream.Write(nmmx.RFileBytes, 0, nmmx.RFileBytes.Length);
 
                    // close file stream
                    _FileStream.Close();
 
                    par.Add(new ExplodUnit { from = size, to = tox, part = parts,unit = nmmx.RFileBytes});
                    size = ss;
 
                    
                }
 
                var file = engi.CollectFile(par);
                
            }
 
            var dow = engi.RequestEasyDownLoading(dir, fileGuid);
            var nmm = engi.SendRequest(dow).ResultEnginer<ResponseDownloadModel>();
 
        }
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:31
C#
1
tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength - 1 : ss;
Я правильно понимаю эту строку? Если мы добрались в цикле до "последнего куска", то мы берем от последнего куска все, кроме последнего байта? А что, если вместо tox использовать значение из toy? Ну или tox привести к виду:
C#
1
tox = (int)mxx.RFileLength < ss ? (int)mxx.RFileLength : ss;
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:37
nORb Dragon, будет вот это

Дополнительные сведения: Запрошенное значение "Incorrect range" не найдено.

и да ты понимаешь всё верно...

Добавлено через 3 минуты
я пробовал тонцевать в разных позах но пока ситема чпокает только меня((( Мне грустно.... и печально...
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:40
Лааадно... А что у тебя хранится в (int)mxx.RFileLength, когда цикл выполняет последний заход?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 16:46
nORb Dragon, ну как бэ полный сайз выгружаемого файла

Добавлено через 1 минуту
maxPartSize = всегда равен 5242880 - это размер части при эксплоде и при выгрузке... По суте константа...
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 16:54
Цитата Сообщение от NaGuWaL Посмотреть сообщение
ну как бэ полный сайз выгружаемого файла
Как бы... Вот на момент выполнения последнего прохода в цикле, чему равно значение внутри (int)mxx.RFileLength? Ровно. Целым числом. Без линков на "как бы" и "приблизительно". %)

*неправильный код, убрал*
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
07.09.2016, 17:12
nORb Dragon, Вот смотри. в последнем проходе что происходи:

C#
1
2
3
4
part:4
from: 15728640
to: tox = 16164723
byte_size: 436083
пельме?

* удалил пояснение к неправильному коду *

(int)mxx.RFileLength = 16164724

Добавлено через 13 минут
(int)mxx.RFileLength == Content-length
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
07.09.2016, 18:43
Хмм... Правильный размер файла - 16164724. С учетом того, что tox у тебя уменьшает на единицу в случае "неполного куска", предполагается что на сервере ланита находится полноценный файл.

Насколько подозреваю, вариант тупо залить этот файл на какой-нибудь личный сервак с apache/nginx и попробовать вытянуть его оттуда этим кодом (с убиранием "-1" из tox), можно не предлагать? Уже тестил и проблем не возникло?

В таком случае мое скромное мнение: баг у ланита, о котором надо как-то им сообщить. Если утрировать и не вдаваться в подробности, то можно как-то так:

Не по теме:

А у вас выгрузка файла по частям (размерностью свыше 5мб) через интеграцию с серверов СИТ не работает! Ха-ха!



Добавлено через 1 час 24 минуты
NaGuWaL, ты же можешь тестировать не полноценную выгрузку, а интересующий тебя диапазон? Представим, что наш код идеален и красив настолько, что его можно использовать. Ну да, хотя меня все равно смущают перекрывающие друг друга ренджи в том коде, но получаемые куски по какой-то волшебной причине имени Ланита не содержат "задвоения байтов". Это смущает, настораживает, ну да ладно. Колдовство!

Предлагаю в коде функции, которую ты приводил выше, подправить:
C#
1
var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, tox);
на:
C#
1
var dowx = engi.RequestUnitDownLoading(dir, fileGuid, size, ((int)mxx.RFileLength < ss ? NULL : ss ) );
Ну а tox вернуть к "без-минус-адын варианту", благо загрузке мешать он (предположительно) больше не будет.

По задумке, если верить разным источникам по http-запросам и msdn (?), то получим генерацию запроса с параметром в заголовке вида:
Code
1
Range: bytes=xxxx-
, где xxxx - указанный нами form (очепятки рулят и карают!). NULL в качестве второго параметра (окончания диапазона) в RangeHeaderValue теоретически должно дать нам не ошибку генерации диапазона, а как раз вышеуказанный вид.
Отсутствие значения после тире должно серверу намекать, что тебе нужен оставшийся кусок файла, начиная с позиции xxxx (form).

Если сильно повезет... Что предложенный мною вариант не сбойнет (тестить не на чем xD, и .нет осваивать желания никакого нет), да и что у Ланита обработчик подобных запросов существует... то ты получишь многострадальный последний кусок от файла с потерявшимся байтом.
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
07.09.2016, 21:51
Хм, хотя мне загрузка/выгрузка файлов пока не нужна, но и интересом читаю про свежие косяки
Господа, а почему бы вам не зайти с другой стороны и попробовать создать и залить файл размером 1 байт, а потом выгрузить его обратно?

Потом два байта...
0
08.09.2016, 00:28

Не по теме:

Опасные вещи предлагаешь... А вдруг возрадуемся удаче, и на радостях попробуем три байта? И хоп! Краш соединения, СИТ-2 не отвечает, свет гаснет, исходники не сохранены, паника! И только лишь ядерный грибок о чем-то приятном намекает на горизонте...

0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
08.09.2016, 09:50
nORb Dragon, Блин, да ты весельчак, позитивный... Пробую загрузить последнюю часть по твоему предложению)))

Добавлено через 1 час 25 минут
собственно вот ответ:
JSON
1
2
3
4
5
6
7
8
9
10
{StatusCode: 500,
 ReasonPhrase: 'Internal Server Error', Version: 1.1,
 Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Connection: keep-alive
  Date: Thu, 08 Sep 2016 06:46:00 GMT
  Server: nginx
  Content-Type: text/html; charset=utf-8
}}
Добавлено через 43 секунды
так что твой вариант не канает(((
0
19 / 8 / 0
Регистрация: 01.08.2016
Сообщений: 102
08.09.2016, 10:02
Это ответ от ланитовского сервера? Или от твоего "приватного" с nginx'ом?
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
08.09.2016, 10:06
nORb Dragon, Я работаю только с ланитовскими серваками..

Добавлено через 1 минуту
Выципил запросы-

Java
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
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:52:42 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=0-5242880
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:55:17 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=5242880-10485760
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 06:57:55 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=10485760-15728640
}}
 
 
{Method: GET, RequestUri: 'http://127.0.0.1:8080/ext-bus-file-store-service/rest/homemanagement/216bee92-347f-41d1-ada4-67d10effe822?getfile', Version: 1.1, Content: <null>, Headers:
{
  Date: Thu, 08 Sep 2016 07:00:34 GMT
  Authorization: Basic bGFuaXQ6dHYsbjghWWE=
  X-Upload-Dataprovider: 577afaad-c398-40e1-8f4e-e6341eb0b729
  Range: bytes=15728640-16164723
}}
0
1 / 1 / 0
Регистрация: 02.06.2016
Сообщений: 27
08.09.2016, 10:06
NaGuWaL Добрый день, у нас точно такая же проблема, теряется последний байт. В последней части файла в range приходится указывать на 1 байт меньше (((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2016, 10:06

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к этому и пришел....а на дворе 1 июля ...

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться....

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ, До этого не работал с SOAP, почитал все...

1С и ГИС ЖКХ. Интеграция
Доброго дня, коллеги! Я думаю многие слышали о такой ГИС, как ЖКХ. Друзья, сталкивался ли кто нибудь с задачей интеграции с этой...

Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request
Вводная: 1. C#. Классы proxy для работы с API генерятся утилитой SvcUtil.exe из wsdl-ек. 2. При срабатывании форматно-логического...


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

Или воспользуйтесь поиском по форуму:
80
Закрытая тема Создать тему
Опции темы

Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru