![](/img/trans.png)
[英]How to get access my data (username, password etc;) from FormData() into my express server
[英]How to get data from a Formdata object in my views?
我的AJAX調用發送一個FormData
對象,其中包含一個上傳的圖像數據:
$(document).on('submit', '#profileImageForm', function(e){
e.preventDefault();
var form_data = new FormData();
var image = document.getElementById('id_banner_image').files[0].name;
form_data.append('file', image);
$.ajax({
type:'POST',
url: '/change_banner_image/',
data : {
form_data: form_data,
csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
},
traditional: true,
cache: false,
success: function(response){
console.log('Success');
},
});
});
並且在我的視圖中成功接收到該呼叫:
def change_banner_image(request):
if request.is_ajax():
data = request.POST.get('form_data')
profile = get_object_or_404(Profile, user=request.user)
profile.image = data
profile.save()
print(data)
return HttpResponse()
print(data)
打印: [object FormData]
。 那么如何從這個FormData
對象獲取上傳的圖像? 然后它將是profile.image
的值(這是一個FileField
)。
問題是因為您正在編碼FormData
本身,這是不正確的。 它是二進制數據,無法按照您嘗試的方式進行編碼。
相反,您需要反轉邏輯以將CSRF令牌添加到您發送的FormData
。 您還需要將processData
和contentType
設置為false
以便在發送請求之前不修改二進制數據,並刪除traditional
屬性。 嘗試這個:
$(document).on('submit', '#profileImageForm', function(e){
e.preventDefault();
var form_data = new FormData();
var image = document.getElementById('id_banner_image').files[0].name;
form_data.append('file', image);
form_data.append('csrfmiddlewaretoken', $("input[name='csrfmiddlewaretoken']").val());
$.ajax({
type:'POST',
url: '/change_banner_image/',
data: form_data,
processData: false,
contentType: false,
cache: false,
success: function(response){
console.log('Success');
},
});
});
你可以試試這個
data = request.data
如果您發送文件數據
files = request.FILES
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.