2011-08-31 69 views
8

在继续阅读之前,请相信我,当我说我已阅读关于此主题的所有其他帖子时,他们都没有帮助。使用JQuery和Django上传图片

我想添加图像上传功能到我的网站。我想通过ajax帖子上传图片 。我无法得到这个工作。

以下是我有:

HTML - 我有一个特殊的设置,使显示图像,而不是一个愚蠢的按钮 和文本字段。我也在使用onChange事件自动提交,当我选择图像后点击“确定”。

<form id="add-picture-form" method="POST" action="/api/upload_image/" enctype="multipart/form-data">{% csrf_token %} 
    <div class="thumbnails" style="width:400px;"> 
     <label class="cabinet BrandHeader"> 
      <input type="file" class="file" id="upload-photo" onChange="$('#add-picture-form').submit();" /> 
     </label> 
    </div> 
</form> 

的Jquery:

$('#add-picture-form').submit(function() { 
    //var filename = $("#upload-photo").val(); 
    var photo = document.getElementById("upload-photo"); 
    var file = photo.files[0]; 

$.ajax({ 
    type: "POST", 
    url: "/api/upload_image/", 
    enctype: 'multipart/form-data', 
    data: {'file': file.getAsBinary(), 'fname' : file.fileName }, 
    success: function(){ 
     alert("Data Uploaded: "); 
    } 
}); 

    return false; 
}); 

当您发布到被打到最后我的Django视图/ API/upload_image/

def ajax_upload(request): 

    print request.POST 
    print request.FILES 

    return http.HttpResponse(simplejson.dumps([True]), mimetype='application/javascript') 

我试图将图像写入二进制,但我无法打开已写入的数据。 为什么上传一个使用javascript这么难的图像?我是一个白痴,只是没有使用简单的解决方案?如果是这样,请告诉我在Django中使用jQuery上传图片的最佳方式是什么。

+0

你卡在哪里?你的HTML/JS工作正常吗?或者你有问题吗? – bcoughlan

+0

你能以这种方式发布任何文件到服务器吗?我不认为文件可能会被服务器ajax化。 –

回答

2

我对django并不熟悉,但我认为问题在于通过AJAX上传文件并不像您想象的那么简单。

有几种方法可以解决这个问题,但我建议使用一个已经存在的方法。由于您使用jQuery的,我会推荐的jQuery插件形式:http://jquery.malsup.com/form/#getting-started

插件支持文件上传开箱即用,真正所有你需要做的是线它到您的窗体:

$('#add-picture-form').ajaxForm(); 

还看到:How can I upload files asynchronously?

+0

让我试试这个,让你知道。谢谢 – josephmisiti