Автор | Сообщение |
|
| |
Пост N: 61
Зарегистрирован: 02.07.12
|
|
Отправлено: 18.08.16 21:52. Заголовок: Проверка файлов на crc/md5 на FTP-сервере?
Если в библиотеке hbtip функции проверки файлов на фтп? Если нету, то как можно средствами харбора организовать такую проверку? В харборе есть две функции для вычисления контрольных чисел (hb_md5file, hb_crc32) с помощью них я получаю контрольное число файла до передачи на фтп-сервер, как организовать такую же проверку, но только на фтп-сервере? Сервер поддерживает команды XCRC, XMD5
|
|
|
Ответов - 11
[только новые]
|
|
|
| |
Пост N: 5971
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.08.16 22:23. Заголовок: MD5 врядли получишь ..
MD5 врядли получишь , но вот размер можно. Посему имея размер исходного файла и его размер после заливки на FTP , их можно сравнить. Впрочем можно самостоятельно дописать нужный класс в Harbour если что. ЗЫ Это я про HBTIP писал Но есть HBCURL и там возможностей больше , может там и есть такое ....
|
|
|
|
| постоянный участник
|
Пост N: 1259
Зарегистрирован: 09.10.06
|
|
Отправлено: 18.08.16 23:12. Заголовок: Dima пишет: Это я п..
Dima пишет: У класса TIPClientFTP есть метод UserCommand( cCommand, lPasv, lReadPort, lGetReply ) Eduard пишет: цитата: | Сервер поддерживает команды XCRC, XMD5 |
| Можно попробовать
|
|
|
|
| постоянный участник
|
Пост N: 1260
Зарегистрирован: 09.10.06
|
|
Отправлено: 18.08.16 23:27. Заголовок: XCRC "filename..
цитата: | XCRC "filename" SP EP Вычисляет контрольную сумму CRC32 файла filename от SP до EP. SP - Начальная точка в байтах EP - Конечная точка в байтах Ответы сервера : 250 501 Bad or missing parameters. 504 Command not implemented for the specified argument. XMD5 "filename" SP EP Вычисляет контрольную сумму MD5 файла filename от SP до EP. SP - Начальная точка в байтах EP - Конечная точка в байтах Ответы сервера : 250 501 Bad or missing parameters. 504 Command not implemented for the specified argument. |
| Это для Gene 6. 250 скорее всего цитата: | The response is 250 - XCRC XXXXXXXX Where XXXXXXXX is the computed checksum. |
|
|
|
|
|
| |
Пост N: 62
Зарегистрирован: 02.07.12
|
|
Отправлено: 19.08.16 10:21. Заголовок: Что означают данные ..
Что означают данные параметры в этой функции, что туда надо писать или их можно пропустить (последние 3)? UserCommand( XCRC File 1 100, lPasv, lReadPort, lGetReply ) Еще по ходу, скажите правильно ли я написал данную функцию ? METHOD XCRC(cFile, cStart, cEnd) CLASS TIPClientFTP ::inetSendAll( ::SocketCon, "XCRC " + cFile + cStart + cEnd + ::cCRLF ) RETURN ::GetReply()
|
|
|
|
| постоянный участник
|
Пост N: 1261
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.08.16 12:14. Заголовок: Eduard пишет: Что ..
Eduard пишет: цитата: | Что означают данные параметры в этой функции, что туда надо писать или их можно пропустить (последние 3)? UserCommand( XCRC File 1 100, lPasv, lReadPort, lGetReply ) |
| XCRC File 1 100 - а, что это такое? Смотрите исходники, в вашем случае if (ftp1:UserCommand( 'XCRC "Filename" 0 -1', .f. /* или .t. - х-з что у вас за ftp сервер*/, .f., .t. ) == .t. ) и проверка :cReply сильно упростила бы жизнь. Зачем вам город городить с добавлением метода XCRC.
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 02.07.12
|
|
Отправлено: 19.08.16 19:43. Заголовок: Получаю ошибку на вы..
Получаю ошибку на выходе, 504 Command not implemented for the specified argument. Если имя файла передаю без ссылки то все ок., я если вот так oFTP:UserCommand( 'XMD5 (cFile[ F_NAME ]) 0 -1', .f. , .f., .t. ) - то получаю на выходе ошибку 504. Как передать в параметрах имя файла из переменной? Как результат задачи (код МД5) записать в переменную?
|
|
|
|
| постоянный участник
|
Пост N: 1262
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.08.16 20:19. Заголовок: Eduard пишет: Если ..
Eduard пишет: цитата: | Если имя файла передаю без ссылки |
| Какая ссылка? Куда? Команда на сервер передается в виде строки cCommand. Строку можно сформировать разными способами, хотя бы так cCommand := hb_strFormat( 'XMD5 "%s" 0 -1', cFile) или cCommand := hb_strFormat( 'XMD5 "%1$s" %2$d %3$d ', cFile, nStart, nEnd) или cCommand := a + b + c Поскольку XMD5 - не стандартная команда, реализация ее зависит от сервера. Т.е. брать имя файла в кавычки или нет, понимает ли сервер, что значит EP = -1 я вам сказать не могу. Потратитьте 5 мин. на тестирование или документацию на сервер почитайте. Eduard пишет: цитата: | Как результат задачи (код МД5) записать в переменную? |
| Если все отработает нормально, вы в :cReply получите строку что-то вроде "250 - XCRC XXXXXXXX" или "250 - XMD5 XXXXXXXX". Как из строки вытащить подстроку XXXXXXXX ? - воспользуйтесь hb_regexSplit( ' ', :cReply )[4] или любым другим доступным вам методом.
|
|
|
|
| |
Пост N: 5972
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.08.16 21:58. Заголовок: Петр пишет: Это для..
Петр пишет: цитата: | Это для Gene 6. 250 скорее всего |
| Eduard Так ГЕНА 6.XXX стоит или что другое в качестве FTP сервера ?
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 02.07.12
|
|
Отправлено: 19.08.16 22:21. Заголовок: Да, G6 FTP Server..
Да, G6 FTP Server Тестовый дома. И на работе тоже.
|
|
|
|
| постоянный участник
|
Пост N: 1263
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.08.16 02:13. Заголовок: FOR EACH aF..
цитата: | FOR EACH aFile IN oFTP:ListFiles() IF aFile:__enumIndex() > 10 ? "Skipping the rest..." EXIT ENDIF cCommand := hb_strFormat( 'XMD5 "%1$s" 0 -1 %2$s', aFile[ F_NAME ], tip_CRLF() ) oFTP:UserCommand( cCommand, .t., .f., .t. ) IF "250" $ oFTP:cReply cMD5 := hb_regexSplit( ' ', oFTP:cReply )[ 2 ] ? aFile[ F_NAME ], "-", cMD5 ENDIF NEXT |
| Метод UserCommand автоматом не добавляет перевод строки ( + ::cCRLF ). Поэтому и сервер результаты возвращает своеобразно (рекомендую посмотреть логи сервера с и без tip_CRLF() ).
|
|
|
|
| |
Пост N: 5973
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.08.16 12:26. Заголовок: Петр :sm36: ..
Петр
|
|
|
|