Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать размер файлового обьекта, чтобы отобразить прогресс при аплоаде 
V
    Опции темы
kulibinka
Дата 3.2.2007, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



захотелось при аплоаде на сервер отображать процесс аплоада.
Для этого сделал такую штуку:

Код

class dot_FTP(ftplib.FTP):
    def storbinary(self, cmd, fp, blocksize=8192):
        ''' Store a file in binary mode.'''
        self.voidcmd('TYPE I')
        conn = self.transfercmd(cmd)
        while 1:
            buf = fp.read(blocksize)
            if not buf: break
            conn.send(buf)
            sys.stdout.write('.')
            sys.stdout.flush()
        conn.close()
        return self.voidresp()


И в процессе аплоада побежали точки..........

Но вместо сотен точек хотелось бы видеть что нибудь информативно-привычное, типа обычного Progress bar.

Он найден тут http://aspn.activestate.com/ASPN/Cookbook/...n/Recipe/168639, да вот только для того чтобы вкрутить его в аплоад нужно знать размер файла.

ВОПРОС:
как узнать размер файлового обьекта fp?
PM MAIL   Вверх
Daevaorn
Дата 3.2.2007, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(kulibinka @  3.2.2007,  02:17 Найти цитируемый пост)
как узнать размер файлового обьекта fp? 

попробуй так:
Код

pos = fp.tell()
fp.seek( 0, 2 )
size = fp.tell()
fp.seek( pos, 0 )

PM MAIL WWW   Вверх
kulibinka
Дата 3.2.2007, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



Супер, спасибо огромное smile

Вот код:

Код

class dot_FTP(ftplib.FTP):
    def storbinary(self, cmd, fp, blocksize=8192):
        ''' Store a file in binary mode.'''
        self.voidcmd('TYPE I')
        conn = self.transfercmd(cmd)

        pos = fp.tell()
        fp.seek(0, 2)
        file_size = fp.tell()
        fp.seek(pos, 0)

        all_steps = file_size/blocksize
        prog = progressBar(0, all_steps, 77)
        i = 0
        while 1:
            buf = fp.read(blocksize)
            if not buf: break
            conn.send(buf)
            prog.updateAmount(i)
            print prog, "\r",
            sys.stdout.flush()
            i+=1
        print
        conn.close()
        return self.voidresp()

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.