Я кодирую небольшой веб-сайт с Python и CGI, где пользователи могут загружать zip-файлы и загружать файлы, загруженные другими пользователями. В настоящее время я могу правильно загрузить zip, но у меня возникли проблемы с правильной отправкой файлов пользователю. Мой первый подход:Как развернуть zip-файлы (или другие двоичные файлы) через cgi в Python?
file = open('../../data/code/' + filename + '.zip','rb')
print("Content-type: application/octet-stream")
print("Content-Disposition: filename=%s.zip" %(filename))
print(file.read())
file.close()
Но вскоре я понял, что я должен был отправить файл в двоичном виде, поэтому я попытался:
print("Content-type: application/octet-stream")
print("Content-Disposition: filename=%s.zip" %(filename))
print('Content-transfer-encoding: base64\r')
print(base64.b64encode(file.read()).decode(encoding='UTF-8'))
И разные варианты этого. Это просто не работает; Apache вызывает ошибку «неправильный заголовок из сценария», поэтому я предполагаю, что я должен закодировать файл каким-то другим способом.
Я уже печатаю пустую строку. Обратите внимание на «\ r» в конце печати («Content-transfer-encoding: base64 \ r») и помните, что «print» автоматически добавляет «\ n» в конце. Я только что пробовал свой код, но Apache продолжает жаловаться на неправильный заголовок. Во всяком случае, это выглядит намного лучше. – derkomai
Право; похоже, что ваш заголовок также искажен; см. [RFC 2616] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html). –
Я не вижу, где заголовок неверен. Но я только что успешно протестировал, что, если я создам ссылку на файл, он автоматически отправляется без использования предыдущего кода. Каков правильный путь? – derkomai