无法使用django上传文件

时间:2010-07-02 12:13:55

标签: python django

我无法使用django上传文件。当我点击提交按钮时,我收到“此网页无法使用。http://127.0.0.1:8000/results的网页可能会暂时关闭,或者可能已永久移至新的网址。” chrome中的错误。

对于文件上传HTTP查询,相应的Web服务器的日志条目为:

[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()

修改

我也尝试将目标行destination = open('queryImage', 'wb+')更改为destination = open(os.environ['TMP']+'\\'+filename, 'wb+')。它仍然给出同样的错误。我试图上传的文件也不到2.5MB。

编辑2:

我在upload_and_search的第一行添加了一个print语句。它没有打印任何东西。即..它甚至没有进入功能。我还通过直接访问网址http:// 127.0.0.1:8000/results来检查我的网址映射是否有问题。它的工作正常。我认为服务器配置存在一些问题。我不知道如何配置此服务器或配置什么。我被卡住了!我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

我猜它是因为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)

答案 1 :(得分:0)

试试这个:

filename = f['filename']
destination = open('%s/%s' % (MEDIA_ROOT, filename), 'wb')