我有一个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中?我该怎么解决呢?
1条答案
按热度按时间nhhxz33t1#
我想可能是文件大小的差异。在Windows检查器中显示
content-length: 1132500
,Safari检查器显示content-length: 86348
。你上传了同样的文件吗
参照:about 413