HTML-формы предоставляют средство для выбора файла, которое вызывает стандартное Windows-диалоговое окно, позволяющее пользователю выбрать файл, просматривая каталоги локальной файловой системы. Для того чтобы задействовать данное средство, в HTML-элемент form нужно включить атрибут enctype и указать тип кодировки multipart/form-data.
Посредством чтения свойства file объекта FieldStorage можно записать копию загруженного на веб-сервер файла.
<!-- get.html -->
<!DOCTYPE HTML>
<html lang="ru">
<head> <meta charset="UTF-8">
<title>Пример загрузки файла</title> </head>
<body>
<form method="POST" action="cgi-bin/1.py"
enctype="multipart/form-data" >
<input type="file" name="filename" style="width:400px">
<input type="submit" value="Отправить">
</form>
</body>
</html>
#!C:\Users\1\AppData\Local\Programs\Python\Python35-32\python.exe
#1.py
import cgi, os
data = cgi.FieldStorage()
upload = data['filename']
filename = os.path.basename(upload.filename)
with open(filename, 'wb') as copy:
copy.write(upload.file.read())
print('Content-type:text/html\r\n\r\n')
print('<!DOCTYPE HTML>')
print('<html lang="ru">')
print('<head>')
print('<meta charset="UTF-8">')
print('<title>Результат работы Python-скрипта</title>')
print('</head>')
print('<body>')
print('<h1>Файл загружен:', filename, '</h1>')
print('<a href="/get.html">Вернуться</a>')
print('</body>')
print('</html>')
Обратите внимание, что для копирования загруженного файла здесь использовался двоичный режим.