我无法使用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来检查我的网址映射是否有问题。它的工作正常。我认为服务器配置存在一些问题。我不知道如何配置此服务器或配置什么。我被卡住了!我不知道该怎么做。
答案 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')