我有一个端点,可以从该端点将图像上传到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*
我不确定在测试服务器和生产服务器之间其他所有内容都相同的情况下,为什么生产代码无法正常工作。如果有人能帮助我,我将不胜感激。 预先感谢。