【发布时间】:2015-11-08 03:01:55
【问题描述】:
我正在尝试在 django rest 中使用 multipart/form-data 在 PUT 请求和 Pillow 中上传图像:
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)
我提出了一个 PUT 请求和一个多部分/表单数据的请求。我最终得到 400 的响应代码和消息:
{
"detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
不知何故,这刚刚坏了。当我第一次写它时,它工作得很好。从那时起,我为 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'
)
有什么想法吗?
OPTIONS 请求响应:
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
【问题讨论】:
-
你能把浏览器请求添加到嗅探器中吗?
-
没有嗅探器。我正在使用邮递员提出此请求。
-
你能发送
OPTIONS请求到同一个 URL 并检查响应是什么吗?对于一个有效的 CORS 服务,响应应该是一个空的200 OK响应,带有Access-Control-Allow-Methods, Access-Control-Allow-Origin等标头。 -
所以来自邮递员的请求标头+表单数据
-
在找了很多解决方案后,我发现从请求中删除
content-type标头可以解决这个问题。