2014-12-15 4 views
0

У меня возникла проблема при попытке отправить изображение через запрос AJAX в Django. Вот мой HTML:Отправить файл Django через Ajax

<form> 
<input type="file" id="files" name="image"> 
</form> 

Вот мои JS:

var control = document.getElementById("files"); 
var p = { 
     title: $('input[name=title]').val(), 
     subtitle: $('input[name=subtitle]').val(), 
     content: $('textarea#article-content').val(), 
     image: files[0], 
    }; 
    $.ajax({ 
     url: '/prive/nouveau-projet', 
     type: "POST", 
     data: JSON.stringify(p), 
     crossDomain: true, 
     success: function() { 
      window.location.href = '/prive/projets/'; 
     }, 
     error: function() { 
      console.log("error"); 
     } 
    }); 

А вот мой код на стороне сервера:

if request.method == "POST": 
    data = request.POST.keys()[0] 
    dataJson = json.loads(data) 
    p = Projet(title=dataJson['title'], subtitle=dataJson['subtitle'], content=dataJson['content'], image=dataJson['image']) 
    p.save() 
    return HttpResponse() 

Это то, что я пытался, но я получаю ошибки около dataJson['image']. Не могли бы вы мне помочь, пожалуйста ?

ответ

1

вам не нужен JSON.stringify.

просто написать это:

var data = new FormData(); 
var img = $('#image_field_id')[0].files[0]; 
data.append('img', img); 
$.ajax({ 
    url : "/prive/nouveau-projet", 
    processData : false, 
    contentType : false, 
    type : 'POST', 
    data : data, 
}).done(function(data) { 
    // work with data    
}); 

и в представлениях

if request.method == "POST": 
    file = request.FILES.get('img') # FILES instead of POST 
    ....