python – Django在S3中存储上传的文件

前端之家收集整理的这篇文章主要介绍了python – Django在S3中存储上传的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个类使用Django REST框架将POST端点暴露给API使用者.

代码应该接收文件上传,然后将其上传到S3.文件正确上传到Django应用程序(file_obj.length返回实际文件大小),并在S3中创建对象.但是,S3中的文件大小为零.如果我记录file_obj.read()的返回,它也是空的.

怎么了?

  1. from django.conf import settings
  2.  
  3. from rest_framework.views import APIView
  4. from rest_framework.response import Response
  5. from rest_framework.parsers import FileUploadParser
  6. from boto.s3.connection import S3Connection
  7. from boto.s3.key import Key
  8.  
  9. from .models import Upload
  10. from .serializers import UploadSerializer
  11.  
  12.  
  13. class UploadList(APIView):
  14. parser_classes = (FileUploadParser,)
  15.  
  16. def post(self,request,format=None):
  17. file_obj = request.FILES['file']
  18.  
  19. upload = Upload(user=request.user,file=file_obj)
  20. upload.save()
  21.  
  22. conn = S3Connection(settings.AWS_ACCESS_KEY,settings.AWS_SECRET_KEY)
  23. k = Key(conn.get_bucket(settings.AWS_S3_BUCKET))
  24. k.key = 'upls/%s/%s.png' % (request.user.id,upload.key)
  25. k.set_contents_from_string(file_obj.read())
  26.  
  27. serializer = UploadSerializer(upload)
  28.  
  29. return Response(serializer.data,status=201)

解决方法

有可能某些东西正在读取文件对象,也许你的上传类保存方法,你需要回头看?
  1. file_obj.seek(0)

猜你在找的Python相关文章