Найти - Пользователи
Полная версия: Докачка на ftp с помощью ftplib
Начало » Network » Докачка на ftp с помощью ftplib
1
well
Всем привет! Столкнулся с проблемой, когда нужно реализовать докачку файла на ftp.Сделал следующим макаром (предполагается, что часть файла уже на ftp):
from ftplib import FTP

sendFile = open ("path/to/file", 'rb')
ftpConnect = FTP ("ftpServer")
ftpConnect.login ("login", "password")
ftpConnect.storbinary ('APPE ' + "file", sendFile, 128)
ftpConnect.quit ()
ftpConnect.close ()
Вроде, все проходит гладко, но размер закачанного файла больше от исходного на столько, сколько весила загруженная часть файла. Пробовал заливать с помощью FileZilla - все ок. Сервер на proftpd, опции AllowStoreRestart и AllowOverwrite включил. Может кто знает, в чем проблема?
ZZZ
Я с ftplib не работал, но попробовал бы сделать sendFile.seek(размер_закачаной_части).
Или, если не получится, обернул бы sendFile так, чтобы первый байт был первый незакачаным байтом.
Но мне почему то кажется, что есть более элегантное решение описанное в документпции.
well
Спасибо за подсказку. Проблему решил следующим макаром:
import os
from ftplib import FTP

fileUploadName = "file"
sendFile = open ("path/to/file", 'rb')
ftpConnect = FTP ("ftpServer")
ftpConnect.login ("login", "password")
try:
ftpConnect.voidcmd('TYPE I')
uploadFileSize = ftpConnect.size (fileUploadName)
except:
uploadFileSize = 0
if (uploadFileSize == 0):
ftpConnect.storbinary ('STOR ' + fileUploadName, sendFile, 128)
else:
sendFile.seek (uploadFileSize, os.SEEK_SET)
ftpConnect.storbinary ('APPE ' + fileUploadName, sendFile, 128)
ftpConnect.quit ()
ftpConnect.close ()
ZZZ
well
except:
Перехватывай все эксцепшены только тогда, когда точно понимаешь, что тебе нужны все эксцепшены. В моей практике я сталкивался с таким раза три или четыре… Зато с перехватом не того, что надо из-за лени программиста который это написал, я сталкивался столько раз, что и не пересчитать!
well
Пробовал таким макаром:
fileList = ftpConnect.nlst()
if [fileUploadName in fileList]:
...
но, если на сервере ничего нету (пустой корень), то команда nlst просто подвисает. А за замечание большое спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB