![](/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.