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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файлов из url и отдача пользователю, на лету 
:(
    Опции темы
error256
Дата 4.3.2013, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



необходимо скачивать файл из url и отдавать его пользователю на лету, файлы большие поэтому полная буферизация нереальна, я написал как то так (пример ниже), но буферезируется полностью и при отдаче больших файлов всё виснит:

Код

    import requests

    url = "http://www.test.ru/большой_файл.mp4"
    r = requests.get(url)

    file_for_download = urllib2.urlopen(url)
    response = HttpResponse(mimetype=r.headers['content-type'])
    response['Connection'] = 'keep-alive'
    response['Content-Disposition'] = 'attachment; filename=test.mp4'
    tmp=file_for_download.read(1024)

    while(tmp!=''):
        response.write(tmp)
        tmp=file_for_download.read(1024)

    return response


есть похожий код на пхп который работает правильно, вот как раз его и пытаюсь на python перевести, нужно нечто аналогичное:

Код

<?php
        $url = "http://www.test.ru/большой_файл.mp4";
    $headers = get_headers($url, TRUE);
    $name = basename($url);

    header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
    header('Content-Length: ' . $headers['Content-Length']);
    header('Accept-Ranges: ' . ( isset($headers['Accept-Ranges']) ? $headers['Accept-Ranges'] : 'bytes' ) );
    header('Date: ' . $headers['Date']);
    header('Content-Type: ' . $headers['Content-Type']);
    header('Last-Modifed: ' . $headers['Last-Modifed']);
    header('Connection: keep-alive');
    header('Content-Disposition: attachment; filename="' . $name . '";');    

    @ob_end_clean();

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOPROGRESS, false);
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'callback');
    curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024);
    curl_exec($ch);
    curl_close($ch);


function callback($ch, $data) {
    echo $data;
    ob_flush();

    return strlen($data);
}
?>


помогите пожалуйста реализовать это в питоне, заранее благодарен.
PM MAIL   Вверх
похмелье
Дата 5.3.2013, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: нет
Всего: 1



Можно использовать cURL, как в примере на пхп. Бинды на pypi есть. Выбирайте посвежее и вперёд.
PM   Вверх
error256
Дата 5.3.2013, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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