500 Ошибка при отправке файла из Python в Django - PullRequest
0 голосов
/ 14 октября 2010

Я нашел хороший модуль Python для отправки данных на удаленные серверы через HTTP POST, который называется poster . Итак, я написал простое представление для моего приложения django для получения и хранения данных, а затем попытался отправить какой-нибудь файл. К сожалению, хотя я установил все так, как показано в инструкции, я получаю Internal Server Error. Может кто-нибудь может увидеть, что я делаю не так?

Вот функция просмотра:

def upload(request):
    for key, file in request.FILES.items():
        path = '/site_media/remote/'+ file.name
        dest = open(path.encode('utf-8'), 'wb+')
        if file.multiple_chunks:
            for c in file.chunks():
                dest.write(c)
        else:
            dest.write(file.read())
        dest.close()

Вот инструкция модуля: http://atlee.ca/software/poster/ и некоторые инструкции, на которых я основывался http://www.laurentluce.com/?p=20

Вот трассировка:

In [15]: print urllib2.urlopen(request).read()
-------> print(urllib2.urlopen(request).read())
---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)

/home/rails/ntt/<ipython console> in <module>()

/bin/python-2.6.2/lib/python2.6/urllib2.pyc in urlopen(url, data, timeout)
    122     if _opener is None:
    123         _opener = build_opener()
--> 124     return _opener.open(url, data, timeout)
    125
    126 def install_opener(opener):

/bin/python-2.6.2/lib/python2.6/urllib2.pyc in open(self, fullurl, data, timeout)
    387         for processor in self.process_response.get(protocol, []):
    388             meth = getattr(processor, meth_name)
--> 389             response = meth(req, response)
    390
    391         return response

/bin/python-2.6.2/lib/python2.6/urllib2.pyc in http_response(self, request, response)
    500         if not (200 <= code < 300):
    501             response = self.parent.error(
--> 502                 'http', request, response, code, msg, hdrs)
    503
    504         return response

/bin/python-2.6.2/lib/python2.6/urllib2.pyc in error(self, proto, *args)
    425         if http_err:
    426             args = (dict, 'default', 'http_error_default') + orig_args
--> 427             return self._call_chain(*args)
    428
    429 # XXX probably also want an abstract factory that knows when it makes


/bin/python-2.6.2/lib/python2.6/urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args)
    359             func = getattr(handler, meth_name)
    360
--> 361             result = func(*args)
    362             if result is not None:
    363                 return result

/bin/python-2.6.2/lib/python2.6/urllib2.pyc in http_error_default(self, req, fp, code, msg, hdrs)
    508 class HTTPDefaultErrorHandler(BaseHandler):
    509     def http_error_default(self, req, fp, code, msg, hdrs):
--> 510         raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    511
    512 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 500: Internal Server Error

Я получаю ту же ошибку при попытке отправить свой файл в функцию php (с www.w3schools.com / php / php_file_upload.asp
Также я проверил с помощью wireshark, и мой POST-запрос отправляется без проблем, но затем происходит что-то плохое, и я получаю эти 500. Может быть, сервер каким-то образом ограничен? Загрузка файлов в приложения, работающие на нем, работает свободно.


Размещение этой функции просмотра с URL-адресом на другом сервере и запуск:

import httplib
conn = httplib.HTTPConnection("address")
f = open("file, "rb")
conn.request("POST","/upload", f, headers)
response = conn.getresponse()

Поднято: BadStatusLine Исключение.

1 Ответ

3 голосов
/ 14 октября 2010

Это основной вопрос по Python. Вам нужно импортировать модуль, прежде чем вы сможете его использовать. Так что просто сделайте import urllib в верхней части скрипта, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...