Python的Django-rest-framework框架获取Http上传文件保存后文件内容不对
获取上传文件后,将上传文件流写入到服务器文件中后.文件内容多了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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看你的保存内容应该是使用类似
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
的,所以应该会更简单省事些的方式,就是使用django
的request.FILES
了。参考地址:
https://docs.djangoproject.co...
示例: