簡體   English   中英

PUT請求圖片上傳無法在django休息

[英]PUT request for image upload not working in django rest

我正在嘗試使用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)

我發出了一個請求,它是一個PUT請求和一個multipart / form-data。 我最終得到的響應代碼為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'
    )

有任何想法嗎?

選項請求響應:

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

從標頭中刪除內容類型可解決此問題。

您的錯誤告訴您請求的multipart/form-data內容的邊界無效 - 特別是None 根據設計,這將返回400 (“錯誤請求”)響應代碼。 這里引用了django代碼中的錯誤。

要輸入boundary等於None代碼分支,意味着未在請求的content-type標頭中指定boundary選項。

RFC2046RFC2388引用 )中指定的content-type使用multipart/form-data時必須指定boundary - 特別是第5.1.1節

多部分實體的Content-Type字段需要一個參數“boundary”。

你說它以前有用,所以你應該檢查你用來發出請求的代碼 - 必須改變一些東西意味着沒有在content-type指定boundary

NB我假設請求是代碼生成的,因為<form method="put">是無效的HTML ,因此瀏覽器生成的請求給出HTML將是GET而不是PUT

您通常希望同時使用FormParser和MultiPartParser,以便完全支持HTML表單數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM