gpt4 book ai didi

python - Django Rest Framework 模块 drf-chunked-upload - 上传 block 不起作用

转载 作者:行者123 更新时间:2023-12-05 07:44:44 24 4
gpt4 key购买 nike

我正在尝试使用 Django Rest Framework 模块分块发送大文件 drf-chunked-upload .

但是按照典型用法部分并在过去两天尝试了多种方法,我找不到办法做到这一点。

  1. 我做的第一件事是使 ChunkedUpload 模型具体化,以便在我的项目中使用它,然后进行并运行与之相关的迁移。

  2. 之后,我设置了 url 以在 urls.py 中发出请求:

    url(r'^uploadchunks/$', ChunkedUploadView.as_view())
  3. 现在,我可以按照 Github 项目主页中的典型用法部分第 1 项向 API 发出请求:

An initial PUT request is sent to the url linked to ChunkedUploadView (or any subclass) with the first chunk of the file. The name of the chunk file can be overriden in the view (class attribute field_name)

  1. 使用 httpie发出我运行的请求(整个文件有 32095676 字节,我当时发送 10000000):

    http -a <username>:<password> -f PUT http://127.0.0.1:8000/uploadchunks/ file@~/<first_filechunk> filename='file' 'Content-Range: bytes 0-10000000/32095676'

之后我得到错误:

django.urls.exceptions.NoReverseMatch: Reverse for 'chunkedupload-detail' with arguments '()' and keyword arguments '{'pk': UUID('a6b2f690-1653-4821-bcfd-b0edce60948a')}' not found. 0 pattern(s) tried: []

虽然典型用法部分的第 2 项说我们应该收到响应:

In return, the server will respond with the url of the upload, the current offset, and when the upload will expire (expires). Example:

{
"url": "https://your-host/<path_to_view>/5230ec1f59d1485d9d7974b853802e31",
"offset": 10000,
"expires": "2013-07-18T17:56:22.186Z"
}

我一直想知道上面的错误消息是否指的是缺少 View (ChunkedUploadDetailView?),所以我使用基本代码创建了该 View :

class ChunkedUploadDetailView(generics.RetrieveAPIView):
queryset = ChunkedUpload.objects.all()
serializer_class = ChunkedUploadSerializer

使用 url 配置

url(r'^uploadchuncks/(?P<pk>.*)/$', views.ChunkedUploadDetailView,
name='chunkedupload-detail')

现在,我可以发送第一个文件 block ,并收到响应:

HTTP/1.0 200 OK
Allow: GET, POST, PUT, HEAD, OPTIONS
Content-Type: application/json
Date: Fri, 03 Mar 2017 19:20:46 GMT
Server: WSGIServer/0.2 CPython/3.6.0+
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

{
"completed_at": null,
"created_at": "2017-03-03T19:20:46.502345Z",
"file": "http://127.0.0.1:8000/uploadchunks/chunked_uploads/2017/03/03/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2.part",
"filename": "file0",
"id": "1c469fab-1d0c-4c14-84b3-0d51aa36c8f2",
"offset": 10000000,
"status": 1,
"url": "http://127.0.0.1:8000/uploadchuncks/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2/",
"user": 2
}

来自 httpie

所以,我认为我的方法是正确的,但现在当我按照典型用法部分的第三项操作时:

Repeatedly PUT subsequent chunks to the url returned from the server. Example:

# PUT to https://your-host//5230ec1f59d1485d9d7974b853802e31

{ "my_file": file }

然后我跑:

http -a indc:indc@indc -f PUT http://127.0.0.1:8000/uploadchunks/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2/ file@~/Downloads/<second_filechunk> filename='file' 'Content-Range: bytes 10000000-20000000/32095676'

发送第二个文件 block 时出现 shell 错误:

http: error: ConnectionError: ('Connection aborted.', BrokenPipeError(32, 'Broken pipe')) while doing PUT request to URL: http://127.0.0.1:8000/uploadchunks/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2/

并且,在 django 虚拟服务器中:

Not Found: /uploadchunks/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2/
[03/Mar/2017 16:29:22] "PUT /uploadchunks/1c469fab-1d0c-4c14-84b3-0d51aa36c8f2/ HTTP/1.1" 404 4788

模块似乎找不到关联的模型实例pk=1c469fab-1d0c-4c14-84b3-0d51aa36c8f2

所以我被困在这里两天了。

由于我是一名新的 python/django 开发人员,直到现在我还找不到解决问题的方法。在我看来,有些部分我必须实现,但我不知道为什么。

如果有人已经使用过 drf-chunked-upload,并且知道我缺少什么,我很感激任何帮助。

最佳答案

在 url 中,我看到您在某些地方拼写了“uploadchunks”,在其他地方拼写了“uploadchunks”。这可能是原因。

关于python - Django Rest Framework 模块 drf-chunked-upload - 上传 block 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com