2012-01-12 67 views
3

在Django中上传文件我想使用Uploadify在this tutorial之后上传Django中的文件。我已经正确地执行了所有步骤。除此之外,我还创建了一个模型,用于存储有关正在上传的文件的信息。使用Uploadify获取HTTP响应代码403

我的模板中包含此

<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错误,我从link发现了一些有趣的东西。如果一个视图有修饰器csrf_exempt,并且该视图有404错误,那么django会显示403错误。

实际的问题是,最初我的链接是错误的,所以当我纠正它,我停止了403错误,但我开始得到500错误。这意味着在视图中出现了错误。由于uploadufy不会在firebug中记录任何内容,所以我必须通过在我的视图中逐行进行调试。

似乎由uploadify脚本发送的请求对象不完整,并且在创建对象时行creator = request.user给我错误。除了这一行,上面的代码完全可以工作。

+0

是否在设置中启用了DEBUG? – vikingosegundo 2012-01-12 14:19:38

+0

yes'DEBUG'已启用,我尝试制作一个正常的文件上传表单,并且它工作得很好 – Sachin 2012-01-12 14:29:28

+0

如果启用了调试,您应该获得更多信息,比在此处发布的信息要多。 – vikingosegundo 2012-01-12 15:10:42

回答

1

我建议进一步调试,看看问题出在客户端JavaScript还是服务器端Django代码。

下载适用于Firefox的Firebug插件。加载你的页面。打开Firebug并转到“网络”选项卡。确保所有JavaScript都已加载。 接下来,检查控制台以查看是否存在任何JavaScript错误。 接下来检查Django日志以查看是否有任何HTTP请求正在通过,并且可能存在错误。

这应该有助于您获得更多信息,这将有助于您解决问题。您可以随时通过上述步骤收集的其他信息更新您的问题。

相关问题