Как отправить файл через HTTP, хороший путь, с помощью Python?

После прибытия на несколько проектов, которые работали, но были нужны в главной новой функциональности, одной из моих нижних строк, поскольку технический руководитель, запускающий проект, - то, что модульные тесты - необходимость.

Это просто стоит слишком много, чтобы попытаться переписать код, который был записан без модульных тестов. Код неизменно плохо структурирован (Мультитысяча веб-сервисов строки все в единственном коде позади кого-либо?) и изменения внесения в него (даже когда это хорошо структурировано), не представляя ошибки действительно болезненный процесс.

Это становится особенно верным, когда проект переходит к противопожарному режиму (и не наличие модульных тестов способствует проектам, входящим в то состояние также) - клиенты становятся сварливыми, они потеряли веру в проект, немного вещей, хуже, чем быть бедным парнем, пытающимся получить следующую фиксацию в, не представляя целую груду ошибок регрессии, и даже не имея модульных тестов.

Тех ситуаций можно так легко избежать или по крайней мере смягчить путем объяснения значения тестов впереди. Конечно, существуют ситуации, где модульные тесты не так важны, но они - действительно исключение.

Так да - я настаиваю на модульных тестах и провел много времени, фиксируя путаницу, сделанную другими разработчиками, которые полагались на их навыки кодирования.

5
задан 19 September 2009 в 00:39
поделиться

2 ответа

Вот как я отправляю ZIP-файл,

    req.send_response(200)
    req.send_header('Content-Type', 'application/zip')
    req.send_header('Content-Disposition', 'attachment;'
                    'filename=%s' % filename)

Большинство браузеров обрабатывают его правильно.

6
ответ дан 14 December 2019 в 08:55
поделиться

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

fp = file(path_to_the_file, 'rb')
while True:
    bytes = fp.read(8192)
    if bytes:
        response.write(bytes)
    else:
        return

Какую веб-платформу вы используете?

1
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: