django CORS问题,但仅在一个端点上且仅在Windows中

esyap4oy  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(163)

我有一个Django后端(使用Django REST框架),和一个与它对话的SvelteKit前端。在Windows和macOS上的所有浏览器、所有POST和DELETE请求以及所有具有正确CORS头的浏览器中,一切都运行得很好。
除了上传图像的端点。这一点似乎不适用于Windows用户,在Edge,Chrome或Firefox中。
端点使用Django REST框架的APIView,就像许多其他端点一样。

class ImageUploadParser(FileUploadParser):
    media_type = "image/*"

    def get_filename(self, stream, media_type, parser_context):
        # We create our own filename, and we get the extension based on the actual file type
        return "unused.nope"

class ImageUploadView(APIView):
    permission_classes = (permissions.IsAuthenticated,)
    parser_classes = [ImageUploadParser]

    def post(self, request):
        # [A bunch of logic to upload the file...]

        return Response({"url": f"{relative_path}/{filename}"}, status=status.HTTP_201_CREATED)

我已经设置了corsheaders.middleware.CorsMiddleware及其CORS_ALLOWED_ORIGINS设置。就像我说的,所有其他端点都可以正常工作,上传端点在macOS(Safari,Edge和Firefox)下也可以正常工作。
这是Safari中的网络检查器:

这是Windows上的Edge:

什么可能导致此端点无法工作,并且仅在Windows中?我该怎么解决呢?

nhhxz33t

nhhxz33t1#

我想可能是文件大小的差异。在Windows检查器中显示content-length: 1132500,Safari检查器显示content-length: 86348
你上传了同样的文件吗
参照:about 413

相关问题