你能发现我做错了什么吗?
这是Form(在模板标签中创建):
@register.simple_tag(takes_context=True)
def add_picture_upload(context,textarea_id):
a = """<form style="display:none; visibility:hidden;" id="add_image_form" action="/fotos/upload/" method="post" enctype="multipart/form-data" >"""
b = """</form>"""
form = PictureForm()
return a+str(form)+b
这里是在提交时调用的javascript:
function html_add_image(event) {
event.stopPropagation(); // Stop stuff happening
event.preventDefault(); // Totally stop stuff happening
var data_dict = new FormData($(this)[0]);
var req = api_create("pictures", data_dict);
req.done(function(data) {
alert(data);
})
}
这里是ajax请求:
function api_create(content_name, data_dict) {
var req = $.ajax({
url: '/api/'+content_name+'/',
contentType:"application/json",
dataType: "json",
data: data_dict,
processData: false,
type: 'POST'
}).fail(function(jqXHR, status, err){
// fail
})
return req;
}
它给了我:
详细信息:“JSON解析错误 - 'utf8'编解码器无法解码字节0xff 位置148:无效的起始字节“
或者如果我JSON.stringify数据而不是我得到:
image_field:[“没有提交文件。”]
您有任何建议或网站有一个有效的例子吗?我知道很多人都在努力解决这个问题,但这里所有其他问题并没有真正引领任何问题。
感谢您的时间。
答案 0 :(得分:0)
与流行的看法相反,it's not possible使用JSON上传文件,以便Django可以识别它们而不会乱砍它们。这是因为JSON does not natively support file uploads,所以你必须自己处理文件序列化和上传。
但你有几个选择
Base64FileField
来处理这些文件。 drf-extras提供了可以使用的Base64ImageField
。