Невозможно загрузить файл, используя django - PullRequest
2 голосов
/ 02 июля 2010

Я не могу загрузить файл, используя django. Когда я нажимаю кнопку «Отправить», я получаю сообщение «Эта веб-страница недоступна. Возможно, веб-страница http://127.0.0.1:8000/results временно недоступна или постоянно перемещена на новый веб-адрес». ошибка в хроме.

Для HTTP-запроса загрузки файла соответствующая запись в журнале веб-сервера:

[02/Jul/2010 17:36:06] "POST /results HTTP/1.1" 403 2313

Это форма:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
 <title>Content Based Image Retrieval System</title>
 <link rel="stylesheet" href="site-content/css/style.css" />
</head>

<body>
 <div><img src="site-content/images/logo.jpg" /> </div>
 <form name="myform" action="results" method="POST" ENCTYPE="multipart/form-data>
  <div align="center">
  <br><br>
  <input type="file" size="25" name="queryImage">
  <br><input type="submit" value="Search"><br>
  </div>
 </form>
</body>

запись в urls.py:

(r'^results$',upload_and_search),

представление, которое обрабатывает загрузку файла:

def upload_and_search(request):
    if request.method != 'POST' or request.FILES is None:
        output = 'Some thing wrong with file uploading'
    handle_uploaded_file(request.FILES['queryImage'])
    output = 'success'
    return HttpResponse(output)

def handle_uploaded_file(f):
    destination = open('queryImage', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

EDIT:

Я также пытался изменить строку назначения destination = open('queryImage', 'wb+') на destination = open(os.environ['TMP']+'\\'+filename, 'wb+'). Это все еще дает ту же ошибку. Размер файла, который я пытаюсь загрузить, составляет менее 2,5 МБ.

РЕДАКТИРОВАТЬ 2:

Я добавил оператор печати в первой строке upload_and_search. Он ничего не печатает. то есть, это даже не вход в функцию. Я также проверил, если что-то не так с моим отображением URL-адреса, непосредственно обращаясь к URL-адресу http: // 127.0.0.1:8000/results. Работает нормально. Я думаю, что есть некоторая проблема с конфигурацией сервера. Я понятия не имею, как настроить этот сервер или что настроить. Я застрял! Я понятия не имею, что делать.

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

Я думаю, это из-за csrf http://docs.djangoproject.com/en/dev/ref/contrib/csrf/

, попробуйте изменить с

<form name="myform" action="results" method="POST" ENCTYPE="multipart/form-data">{% csrf_token %}

представление, генерирующее его

from django.core.context_processors import csrf
from django.shortcuts import render_to_response

def showIndexPage(request):
    c = {}
    c.update(csrf(request))
    return render_to_response("index.html", c)
0 голосов
/ 02 июля 2010

Попробуйте это:

filename = f['filename']
destination = open('%s/%s' % (MEDIA_ROOT, filename), 'wb')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...