[英]PUT request for image upload not working in django rest
I am trying to upload an image in django rest using multipart/form-data
in a PUT
request and Pillow: 我正在尝试使用
PUT
请求和Pillow中的multipart/form-data
在django rest中上传图像:
class ABC(APIView):
parser_classes = (MultiPartParser,)
def put(self, request):
a = Image()
a.image_url = request.data["image"]
a.save()
class Image(models.Model):
image_url = models.ImageField(upload_to='static/bills', blank=True)
I make a request which is a PUT request and a multipart/form-data. 我发出了一个请求,它是一个PUT请求和一个multipart / form-data。 I end up getting a response code of 400 with the message:
我最终得到的响应代码为400,并带有以下消息:
{
"detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
Somehow this has broken just now. 不知何故,这已经破裂了。 It was working fine when I wrote it the first time.
我第一次写这篇文章时工作正常。 Since then I have added few settings configuration for CORS requests like:
从那时起,我为CORS请求添加了一些设置配置,例如:
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken',
'token',
'x-device-id',
'x-device-type',
'x-push-id',
'dataserviceversion',
'maxdataserviceversion'
)
CORS_ALLOW_METHODS = (
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'OPTIONS'
)
Any ideas? 有任何想法吗?
OPTIONS Request response: 选项请求响应:
Access-Control-Allow-Headers → x-requested-with, content-type, accept, origin, authorization, x-csrftoken, token, x-device-id, x-device-type, x-push-id, dataserviceversion, maxdataserviceversion
Access-Control-Allow-Methods → GET, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Origin → *
Access-Control-Max-Age → 86400
Allow → GET, POST, DELETE, HEAD, OPTIONS
Content-Type → application/json
Date → Fri, 21 Aug 2015 06:23:28 GMT
Server → WSGIServer/0.1 Python/2.7.6
Vary → Accept
X-Frame-Options → SAMEORIGIN
从标头中删除内容类型可解决此问题。
Your error is telling you that the boundary for your multipart/form-data
content of your request is invalid - in particular that is is None
. 您的错误告诉您请求的
multipart/form-data
内容的边界无效 - 特别是None
。 This, by design, returns a 400
("Bad Request") response code. 根据设计,这将返回
400
(“错误请求”)响应代码。 The Error is raised here in the django code . 这里引用了django代码中的错误。
To enter that code branch with boundary
equal to None
means that the boundary
option is not specified in the content-type
header of your request. 要输入
boundary
等于None
代码分支,意味着未在请求的content-type
标头中指定boundary
选项。
boundary
must be specified when using multipart/form-data
in content-type
as specified in RFC2046 (referred to by RFC2388 ) - in particular section 5.1.1 在RFC2046 ( RFC2388引用 )中指定的
content-type
使用multipart/form-data
时必须指定boundary
- 特别是第5.1.1节
The Content-Type field for multipart entities requires one parameter, "boundary".
多部分实体的Content-Type字段需要一个参数“boundary”。
You say it has worked before, so you should check the code that you are using to make the request - something must have changed to mean that the boundary
is not specified in the content-type
. 你说它以前有用,所以你应该检查你用来发出请求的代码 - 必须改变一些东西意味着没有在
content-type
指定boundary
。
NB I presume the request is code-generated, as <form method="put">
is invalid HTML and so a request generated by a browser given that HTML would be a GET
rather than a PUT
. NB我假设请求是代码生成的,因为
<form method="put">
是无效的HTML ,因此浏览器生成的请求给出HTML将是GET
而不是PUT
。
您通常希望同时使用FormParser和MultiPartParser,以便完全支持HTML表单数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.