如何通过 ajax 将文件发送到 Django 服务器?
Posted
技术标签:
【中文标题】如何通过 ajax 将文件发送到 Django 服务器?【英文标题】:How do I send a file to the Django server via ajax? 【发布时间】:2021-10-13 18:47:41 【问题描述】:我一个多星期都想不通,我需要向 Django 服务器发送图像,但我收到错误:415 (Unsupported Media Type)
如果我将 ContentType 更改为 multipart/form-data,我会得到: 400(错误请求)
通常是通过邮递员发送的,可能是什么错误?: (
脚本
updateUser()
$.ajax(
url:
"http://localhost:8002/api/update_profile/" +
this.username +
"/",
data:
first_name: this.first_name,
username: this.login,
last_name: this.last_name,
email: this.email,
photo: this.image
,
DataServiceVersion: 2.0,
processData: false,
contentType: false,
// contentType:"multipart/form-data",
type: "PUT",
success: function(data)
location.reload()
,
error: function(response)
console.log(this.data)
let err = response.responseJSON;
for (let key in err)
alert(key, err[key].toString());
);
,
UPD。它对表单数据都不起作用
updateUser()
const data =
username: this.login,
first_name: this.first_name,
last_name: this.last_name,
email: this.email,
photo: this.image
let formData = new FormData()
Object.keys(data).forEach((key) =>
formData.append(key, data[key])
)
$.ajax(
url:
"http://localhost:8002/api/update_profile/" +
this.username +
"/",
data:
formData
,
DataServiceVersion: 2.0,
processData: false,
//contentType: false,
contentType:"multipart/form-data",
type: "PUT",
success: function(data)
loaction.reload()
,
error: function(response)
console.log(this.data)
let err = response.responseJSON;
for (let key in err)
alert(key, err[key].toString());
);
,
【问题讨论】:
form postman 你怎么发送数据是原始数据还是表单数据? @Sumithran,我正在发送表单数据 您能分享一下您的看法吗?仅共享 javascript 代码不足以找出问题所在,但如果您使用 Django Rest Framework 和基于类的视图,您可能会错过视图上的parser_classes
属性。
@arif,是的,确实,在 Django 端加载图像存在问题。谢谢,我想错了方向!
【参考方案1】:
如果您需要 utf-8,我认为您将“contentType”更改为“application/json”或“'application/json;charset=utf-8”。数据类型:'json'
dataType: 'json',
contentType: 'application/json; charset=utf-8',
【讨论】:
以上是关于如何通过 ajax 将文件发送到 Django 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有上下文变量的 Django 模板发送到 Ajax 调用?
Django - 如何正确地将列表从模板发送到 AJAX 以查看?
将文件发送到 django 时出现 Keyerror/MultiValueDictKeyError