我正在尝试按照本教程使用 Uploadify 在 Django 中上传文件。我已正确执行所有步骤。除此之外,我还制作了一个模型,用于存储有关正在上传的文件的信息。
我的模板包含这个
<script type="text/javascript" src="{{ STATIC_URL }}uploadify/swfobject.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}uploadify/jquery.uploadify.v2.1.4.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#file_upload').uploadify({
'uploader' : '{{ STATIC_URL }}uploadify/uploadify.swf',
'script' : '{% url upload_file %}',
'cancelImg' : '{{ STATIC_URL }}uploadify/cancel.png',
'auto' : true,
'multi' : true,
'fileExt' : '*.doc;*.docx;*.pdf',
'fileDesc' : 'Upload Docs',
'queueID' : 'file_upload_queue',
'removeCompleted': false,
});
});
</script>
<h2 id="smallHeading"> Upload your Documents </h2>
<input id="file_upload" type="file" name="Filedata" />
<a href="javascript:$('#file_upload').uploadifyUpload();">Upload Files</a>
我的 url.py 文件包含这一行
url(r'^upload/$', 'userprofile.views.upload_file', name='upload_file'),
观点是
@csrf_exempt
def upload_file(request):
if request.method == "POST":
upload_file = request.FILES['Filedata']
upload_instance = Uploads.objects.create(creator = request.user, uploaded_on = datetime.datetime.now())
upload_instance.file.save(upload_file.name,upload_file)
upload_instance.save()
response = HttpResponse()
response.write("%s\r\n" % upload.name)
return response
我的models.py
包含
def get_file_path(instance, filename):
return os.path.join('userprofiles', str(instance.creator.id), filename)
class Uploads(models.Model):
file = models.FileField(upload_to=get_file_path)
creator = models.ForeignKey(User)
uploaded_on = models.DateTimeField()
但这里什么都没有发生。我得到的只是上传按钮,我选择了文件但没有任何反应。有人可以帮我找出发生了什么吗?似乎script
没有被解雇。我知道这一点,因为以前我的观点有错误,但没有出现错误。
任何帮助都深表感谢。
编辑:
我在firebug
控制台中没有看到任何内容,并且net
面板也没有显示任何POST
请求,但django debugger
显示了带有403
响应的文件上传的 POST 请求。我用过csrf_exempt
那为什么要呢forbidden
?
解决方案:我终于解决了这个问题。关于 403 错误,我从这个链接中发现了一些有趣的东西。如果视图具有装饰器csrf_exempt
并且该视图存在 404 错误,则 django 会显示 403 错误。
实际问题是最初我的链接是错误的,所以当我纠正它时,我停止收到 403 错误,但我开始收到 500 错误。这意味着视图中有问题。而且由于uploadufy没有在萤火虫中记录任何内容,我不得不通过在我的视图中单步调试来进行调试。
脚本发送的请求对象似乎uploadify
不完整,creator = request.user
创建对象时的行给了我错误。除了这一行,上面发布的代码完全可以工作。