无法在生产中使用Boto将图片上传到s3

时间:2020-04-15 10:54:35

标签: python django amazon-s3 boto3

我有一个端点,可以从该端点将图像上传到s3。现在的问题是,从本地计算机上载时,代码在生产服务器上不起作用,并且测试服务器运行正常。这是我在生产中遇到的错误:

异常类型:/ v3 / file /中的HTTPClientError 异常值:HTTP客户端引发和未处理的异常:'module'对象没有属性'wait_for_read'

Api代码:

import boto3
from hireapp.settings import AWS_S3
from django.shortcuts import render
from django.utils.crypto import get_random_string
from .serializers import AdCategorySerializer
class FileUpload(APIView):

    permission_classes = (IsAuthenticated, )

    def post(self, request, format=None):

            img = request.data["file"]
            session = boto3.Session(
                aws_access_key_id=AWS_S3["AWS_ACCESS_KEY_ID"],
                aws_secret_access_key=AWS_S3["AWS_SECRET_ACCESS_KEY"],
            )
            s3 = session.resource('s3')
            image_name = get_random_string(25) + img.name
            s3.Bucket(AWS_S3["AWS_STORAGE_BUCKET_NAME"]).put_object(Key='media/%s'%image_name, Body=img, ACL='public-read')
            #url to image
            image_url = "https://mobile.testapp.net/media/{image}".format(image=image_name)
            return Response(image_url,status=status.HTTP_200_OK)

这是stacktrace的一部分:

 *File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  477.             response = self.handle_exception(exc)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/rest_framework/views.py" in handle_exception
  437.             self.raise_uncaught_exception(exc)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  474.             response = handler(request, *args, **kwargs)
File "/home/irongate-server/irongate-server/hireapp/v3/views.py" in post
  29.             s3.Bucket(AWS_S3["AWS_STORAGE_BUCKET_NAME"]).put_object(Key='media/%s'%image_name, Body=img, ACL='public-read')
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/boto3/resources/factory.py" in do_action
  520.                 response = action(self, *args, **kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/boto3/resources/action.py" in __call__
  83.         response = getattr(parent.meta.client, operation_name)(**params)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/client.py" in _api_call
  316.             return self._make_api_call(operation_name, kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/client.py" in _make_api_call
  613.                 operation_model, request_dict, request_context)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/client.py" in _make_request
  632.             return self._endpoint.make_request(operation_model, request_dict)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/endpoint.py" in make_request
  102.         return self._send_request(request_dict, operation_model)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/endpoint.py" in _send_request
  137.                                 success_response, exception):
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/endpoint.py" in _needs_retry
  231.             caught_exception=caught_exception, request_dict=request_dict)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/hooks.py" in emit
  356.         return self._emitter.emit(aliased_event_name, **kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/hooks.py" in emit
  228.         return self._emit(event_name, kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/hooks.py" in _emit
  211.             response = handler(**kwargs)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in __call__
  183.         if self._checker(attempts, response, caught_exception):
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in __call__
  251.                                           caught_exception)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in _should_retry
  269.                 return self._checker(attempt_number, response, caught_exception)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in __call__
  317.                                        caught_exception)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in __call__
  223.                 attempt_number, caught_exception)
File "/home/irongate-server/irongate-server/local/lib/python2.7/site-packages/botocore/retryhandler.py" in _check_caught_exception
  359.         raise caught_exception*

我不确定在测试服务器和生产服务器之间其他所有内容都相同的情况下,为什么生产代码无法正常工作。如果有人能帮助我,我将不胜感激。 预先感谢。

0 个答案:

没有答案