|
|
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Кто работал с FTP в Synapse? У меня DelphiXE8 Интересует, почему FTPClient.StoreFile - закачка файла с именем '什么国家的企业在自贸区.xls' с локального диска на FTP делает файл '??????????????.xls', т.е. FTPClient.StoreFile говорит, что все ОК, файл залит, но на FTP чтение директории (FTPClient.List) показывает вопросики. С другими языками также проблемы, но русский понимает. Поддерживает ли Synapse FTP юникод UTF8 ? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 19:33:42 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52Кто работал с FTP в Synapse?Я работал m52закачка файла с именем '什么国家的企业在自贸区.xls'Но такими извращениями не занимался m52FTPClient.StoreFile Код: pascal 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. И чтобы добить Код: pascal 1. 2. 3. 4. 5. 6. НО! TFTPSend.FTPCommand метод виртуальный. Так, что все в твоих руках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 21:40:20 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Подскажите, можно ли сделать чтобы TBlockSocket.SendString в качестве параметра принимала Data: string, т.е. в UTF8 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2017, 21:56:37 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52Подскажите, можно ли сделать чтобы TBlockSocket.SendString в качестве параметра принимала Data: string, т.е. в UTF8 ? Можно. Для разовых потребностей можно использовать ансейф-кастинг socket.SendString(AnsiString(Pointer(MyUtf8String))); Но более правильный вариант - написать хелпер для TBlockSocket. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2017, 23:10:41 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Я попробовал сделать замену строки Код: pascal 1. на Код: pascal 1. получилось вот что: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Но не работает даже соединение с сервером - отвал по таймауту, <- 220 (vsFTPd 2.2.2) -> USER admin <- 421 Timeout. авторНо более правильный вариант - написать хелпер для TBlockSocket. Что такое хелпер? Можно подробнее? Как все-таки сделать, чтобы TBlockSocket.SendString в качестве параметра принимала Data: string, т.е. в UTF8, а не AnsiString ? Странно, что в FTPCommand(const Value: string) входной параметр в UTF8 (у меня DelphiXE8), а в FSock.SendString передается AnsiString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2017, 06:41:30 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
попробуйте отправить команду FTPCommand('OPTS UTF8 ON'), сервер должен ответить 200 UTF8 mode enabled ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2017, 10:33:59 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52Но не работает даже соединение с сервером Что не удивительно... У тебя XE8, где дефолтные строки (string) являются строками в кодировке UTF-16, а вовсе не в UTF-8, т.е. каждый символ в строке занимает минимум 2 байта. В этом случае опасный кастинг нужно делать через безопасный кастинг: FSock.SendString(AnsiString(Pointer( Utf8String( Value ) + CRLF))); m52 Что такое хелпер? Можно подробнее? Компилябельность не проверял. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Но сперва, всё же, разберись со строками и их кодировками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2017, 10:42:26 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Я попробовал function TFTPSend.FTPCommand оставить как есть, ничего не меняя, а procedure SendString сделать такой: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. , т.е. входной параметр просто заменил с AnsiString на UTF8String Теперь попробовал скачать с FTP-сервера файл с китайским именем "文件測試.ddp" и он скачался! Код: pascal 1. 2. 3. Не совсем понял тогда, зачем мне предложили написать класс TBlockSockClassHelper ? Может я позже наткнусь на грабли? Поясните, пожалуйста, кто в теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2017, 14:53:24 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52 зачем мне предложили написать класс TBlockSockClassHelper Для того, чтобы не править исходники синапса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2017, 15:09:44 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyДля того, чтобы не править исходники синапса. Но это, конечно, не поможет для разруливания проблем с FTP, т.к. метод хелпера сможет вызывать только твой код, но не код синапса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2017, 15:14:07 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyметод хелпераЯ в самом первом сообщении сказал _Vasilisk_TFTPSend.FTPCommand метод виртуальный. Так, что все в твоих руках Что мешает создать наследника TFTPSend и переопределить в нем метод FTPCommand как-то так _Vasilisk_ Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 14:37:50 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Что мешает создать наследника TFTPSend и переопределить в нем метод FTPCommand Хороший вопрос топикстартеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 14:59:51 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Ничего особо не мешает. С этим я попробую. Сейчас меня интересует другой вопрос - это вопрос докачки файла при копировании с локального диска на FTP. Если файл начинает копироваться с самого начала, то проблем нет. Я попробовал в процессе копирования отключить соединение в Windows. Понятно, что копирование файла прервалось. Если обратно включить соединение, перезапустить программу, переконнектиться к FTP и попробовать докачать файл, то программа зависает (по логу, см. ниже видно, что зависает после команды STOR public_html/_exchange/asd.mp4). Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Лог FTP: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Если удалить файл на FTP и начать качать заново - проблем нет. Также при скачивании с FTP на локальный диск - проблем нет (докачивается нормально). Отчего происходит зависание и как его победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 20:40:00 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
А еще замечено, что зависания при докачке нет, если выждать минут 5 после восстановления соединения. Такое ощущение, что соединение хоть и появилось, но как-то не до конца. Но ждать несколько минут никому не хочется, ведь Интернет уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 20:45:38 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52зависания при докачке нет, если выждать минут 5 после восстановления соединения.Вы начинаете заливать файл. На сервере, в потоке подключенного клиента открывается файл на запись и блокируется от модификации другими потоками. Далее - происходит разрыв соединения, но сервер об этом ничего не знает и продолжает держать файл открытым и заблокированным. Вы цепляетесь новым потоком и обращаетесь к заблокированному файлу. Сервер не возвращает ошибки, а ставит запрос в очередь ожидания. По прошествии пяти минут, сервер видит, что в брошенном потоке нет никакой активности, принудительно закрывает соединение и разблокирует файл m52ждать несколько минут никому не хочется,Тогда уменьшите таймаут на сервере. Мы для своих FTP серверов ставим таймаут в 10 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 21:24:48 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ , То что вы описали, похоже что так и есть. Но если при передачи данных по FTP соединение с Интернетом не разрывать, а просто убить программу в диспетчере задач, то после этого докачка работает на УРА, т.е. ничего не блокируется на стороне сервера. Почему так? Проблема в том, что для моей программы FTP-серверов может быть много (много разных клиентов) и уговаривать каждого клиента настроить свой FTP-сервер, уменьшив таймаут, я не могу. Есть ли возможность решить вопрос с докачкой, не перенастраивая сервер? Если нет, то тогда проще будет в случае разрыва связи перезакачать файл заново, чем докачивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2017, 08:16:23 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52Почему так?Потому, что серверу приходит какой нибудь "Connection reset by peer" и сервер закрывает соединение сразу же m52уговаривать каждого клиента настроить свой FTP-сервер, уменьшив таймаут, я не могу.Значит смиритесь. Тем более, что малые таймауты актуальны только для программного доступа. А если сервером пользуются люди через какие-нибудь клиенты, то 5 минутный таймаут самое оно. m52Есть ли возможность решить вопрос с докачкой, не перенастраивая сервер?Закачивать во временные файлы а потом переименовывать. И периодически подчищать недокачанные файлы m52то тогда проще будет в случае разрыва связи перезакачать файл заново, чем докачивать.Если хватит прав и удаленный файл открыт сервером с правами FILE_SHARE_DELETE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2017, 14:37:50 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Описанное выше "зависание" при докачке наблюдается только у 1 из 6 серверов и только при закачке на FTP (upload). Можно "забить" или сделать чтобы юзер сам в настройках мог выбирать, что делать: В случае разрыва связи и восстановления: (*) Докачивать файл ( ) Закачать файл заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2017, 09:07:07 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Кстати, когда писал своего клиента, нарвался на такой баг FTP сервера. При запросе размера недозакачанного файла, файл блокировался на запись и эту блокировку нужно было принудительно снимать. Обошел багу таким кодом Код: pascal 1. 2. 3. 4. 5. 6. 7. Ну и вот моя процедура докачки Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2017, 09:58:35 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ , Я смотрю, у вас TMyFTPSend.StoreStream - это процедура докачки из потока Stream в файл на сервере путем присоединения APPE. Мне нужно докачать не из потока, а из файла: Код: pascal 1. 2. Я пробовал в TFTPSend.StoreFile встроить такой механизм: Код: pascal 1. 2. 3. , но также зависает на InternalStor, видимо костыль в виде FTPCommand('SIZE'); не помог в моем случае, либо я что-то не так делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2017, 13:49:21 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52сервере путем присоединения APPE.Причем вначале проверяется, а имеет ли смысл вызывать такую команду _Vasilisk_ Код: pascal 1. m52 Код: pascal 1. Вот я же не зря это сделал в переопределенной виртуальной функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2017, 14:44:57 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
А что за ошибка "553 Could not create file" возникает при попытке отправить файл с локального диска на FTP ? Эта ошибка то возникает, то нет. Иногда все файлы копируются нормально, а иногда на некоторых выдает эту ошибку. Файлы не используются другими приложениями. Отключение Касперского не помогает (видимо, не в этом дело). Переконнект к FTP тоже не помогает. В случае этой ошибки повторная закачка файла не проходит - опять получаем эту же ошибку. НО! Если в случае ошибки выждать секунд 40 и повторить операцию, то почти всегда новая закачка файла успешна. Как избежать этой ошибки или ожидания в 40 сек перед второй попыткой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 10:07:29 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
m52А что за ошибка "553 Could not create file"Невозможно создать файл m52Файлы не используются другими приложениями.Откуда такая уверенность? m52Переконнект к FTP тоже не помогает.А перезапуск FTP демона? m52Как избежать этой ошибкиПосмотреть логи сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 11:30:16 |
|
||
|
Synapse FTP Client
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, похоже, я сам виноват, что пытаюсь скопировать файл в несуществующую папку. Отсюда и ошибка. Жаль что нет возможности одной командой типа ForceDirectories создать сразу полный путь вида "/www/site/_exchange/folder1", а затем скопировать туда файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 12:58:01 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39451799&tid=2042269]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
198ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 518ms |

| 0 / 0 |
