使用JQuery和Django上传图像

时间:2011-08-31 02:44:36

标签: ajax django jquery

在你继续阅读之前,请相信我,当我说我已经阅读了关于这个主题的所有其他帖子,而且没有人帮助过。

我正在尝试将图片上传功能添加到我的网站。我想上传图片 通过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上传图片这么难?我是个白痴,只是没有使用简单的解决方案?如果是这样,请告诉我使用jQuery在Django上传图像的最佳方法是什么。

2 个答案:

答案 0 :(得分:5)

尝试使用jQuery插件UploadifySWFUpload。有人甚至为你做了Django集成,请参阅:https://github.com/tstone/django-uploadifyhttp://blog.fogtunes.com/2009/11/howto-integrate-swfupload-with-django/

答案 1 :(得分:2)

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

有几种解决方法,但我建议使用已经存在的方法。由于您使用的是jquery,我建议使用jquery表单插件:http://jquery.malsup.com/form/#getting-started

该插件支持开箱即用的文件上传,您真正需要做的就是将其连接到您的表单:

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

另见:How can I upload files asynchronously?