Найти - Пользователи
Полная версия: Получение имени файла при upload'e
Начало » Python для новичков » Получение имени файла при upload'e
1
Infernus
Есть форма заливки файла на сервер:

<form method='POST' enctype='multipart/form-data' action='http://localhost/index.html'>
File to upload: <input type=file name=upfile>
<br><input type=submit value=Upload>
Метод сервера do_POST:
def do_POST(self):
global rootnode
try:
ctype, pdict = cgi.parse_header(self.headers.get('content-type'))
if ctype == 'multipart/form-data':
query = cgi.parse_multipart(self.rfile, pdict)
self.send_response(301)
self.end_headers()
upfilecontent = query.get('upfile')
print('filecontent:', upfilecontent[0])
outstring = '<html><body>Content of the uploaded file: ' + upfilecontent[0] + '<br><a href="http://localhost:80/index.html">Back to the main page</a></body></html>'
self.wfile.write(bytearray(str(outstring).encode(encoding='utf_8', errors='strict')))
except Exception as e:
print(e)
Содержимое файла прочитано. Но, собственно, никак не могу достать имя залитого юзером файла (например, чтобы на сервере создать файл с таким же именем). Просто нет идей, где бы оно могло храниться…
dimabest
А зачем тебе parse_multipart()? В модуле cgi, есть готовый класс FieldStorage.
Если хочешь написать свой парсер, то зачем использовать cgi?
Infernus
Я не знаю почему, но у меня
form = cgi.FieldStorage()
fname = form.getvalue('filename') #тут можно подставить любой input, переданный в форме --- разницы нет
print(fname)
возвращает None. В примерах с FieldStorage такая проблема не описана :/

P.S. а parse_multipart я взял из примера простого HTTP-сервера на Python — надо было с чего-то начать :)
dimabest
если python работает с сервером через WSGI:

form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)
Infernus
dimabest
если python работает с сервером через WSGI:
А если нет? Переделать по-человечески? :)
dimabest
желательно переделать, ибо Проект mod_python прекратил существование
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB