Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 4, 2011 14:51:47

Infernus
От:
Зарегистрирован: 2011-06-04
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

Есть форма заливки файла на сервер:

<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)
Содержимое файла прочитано. Но, собственно, никак не могу достать имя залитого юзером файла (например, чтобы на сервере создать файл с таким же именем). Просто нет идей, где бы оно могло храниться…



Офлайн

#2 Июнь 5, 2011 00:53:13

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

А зачем тебе parse_multipart()? В модуле cgi, есть готовый класс FieldStorage.
Если хочешь написать свой парсер, то зачем использовать cgi?



Офлайн

#3 Июнь 5, 2011 10:00:27

Infernus
От:
Зарегистрирован: 2011-06-04
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

Я не знаю почему, но у меня

form = cgi.FieldStorage()
fname = form.getvalue('filename') #тут можно подставить любой input, переданный в форме --- разницы нет
print(fname)
возвращает None. В примерах с FieldStorage такая проблема не описана :/

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



Отредактировано (Июнь 5, 2011 10:03:47)

Офлайн

#4 Июнь 5, 2011 14:36:52

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

если python работает с сервером через WSGI:

form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)



Офлайн

#5 Июнь 6, 2011 00:09:57

Infernus
От:
Зарегистрирован: 2011-06-04
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

dimabest
если python работает с сервером через WSGI:
А если нет? Переделать по-человечески? :)



Отредактировано (Июнь 6, 2011 00:11:06)

Офлайн

#6 Июнь 6, 2011 00:56:16

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение имени файла при upload'e

желательно переделать, ибо Проект mod_python прекратил существование



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version