Python的Django-rest-framework框架获取Http上传文件保存后文件内容不对

发布于 2022-09-06 22:35:10 字数 1313 浏览 13 评论 0

获取上传文件后,将上传文件流写入到服务器文件中后.文件内容多了http流相关信息

--X-INSOMNIA-BOUNDARY
Content-Disposition: form-data; name="file"; filename="a.txt"
Content-Type: text/plain



Hello




--X-INSOMNIA-BOUNDARY--

应该怎么获取上传文件信息保存的时候,只会是原文件.


补充下我的源代码:


class UploadView(APIView):
    '''
    上传文件专用
    '''

    parser_classes = (FileUploadParser, )

    def put(self, request, filename, format = None):
        '''
        上传
        '''

        up_file = request.data['file']
        base_dir = settings.BASE_DIR

        print filename


        storage = base_dir + '/' + 'storage/'
        new_file = storage + up_file.name

        with open(new_file, 'wb+') as destination:
            for chunk in up_file.chunks():
                destination.write(chunk)

            destination.close()

        # up_file.new_file('file', new_file, up_file.content_type, up_file.size, up_file.charset, up_file.content_type_extra)


        # with open(new_file, 'wb+') as destination:
        #     for line in up_file:
        #         destination.write(line)
        #     destination.close()
        #     # destination.write(up_file.multiple_chunks())
        #     # destination.close()

        return Response(up_file.name, status.HTTP_201_CREATED)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别靠近我心 2022-09-13 22:35:10

看你的保存内容应该是使用类似BaseHTTPServer这种python自带的类完成的上传服务器。
https://github.com/smilejay/p...
如果是这样的话,那些http流的相关信息是没有什么好的办法的,只能自己通过类似readline的方式,一行一行的读取,并且手动去除http相关信息。
所幸这些都是http信息都是有相关标准的,例如 1-4 行为http信息, 5-(-2)行为上传信息,最后一行为http信息(这只是随便举得一个例子)
所以想要通过这种方式来完成上传文件的话,需要自己去研究下rfc标准:
http://www.ietf.org/rfc/rfc1867
http://www.vivtek.com/rfc1867...

但是看你标签上是有django的,所以应该会更简单省事些的方式,就是使用djangorequest.FILES了。
参考地址:
https://docs.djangoproject.co...
示例:

# 获取文件名
request.FILES['filename'].name
# 获取全部文件
for filename, file in request.FILES.iteritems():
    name = request.FILES[filename].name
    # 文件内容(这个不确定,请自行查看文档)
    file.readall()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文