首页 > 解决方案 > AWS S3 写入对象 - TypeError:预期的字符串或类似字节的对象

问题描述

我正在尝试使用 boto3 将一个简单的 txt 文件写入 S3。无论我做什么,都会抛出同样的错误。变量“msg”是一个字符串。理论上它应该被接受,但它没有工作。所以我对其进行了编码,仍然无法正常工作。有任何想法吗?TIA

report = s3.Object(bucket, reportfilename)
byte_msg=bytes(msg, 'utf-8')
s3put = report.put(Body=byte_msg)
Traceback (most recent call last):
  File "/Users/ardey/Google Drive/Tutorials/Python/aws_boto3/s3-interactions.py", line 44, in <module>
    s3put = report.put(Body="""
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(*args, **params)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/client.py", line 386, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/client.py", line 677, in _make_api_call
    request_dict = self._convert_to_request_dict(
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/client.py", line 723, in _convert_to_request_dict
    api_params = self._emit_api_params(
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/client.py", line 752, in _emit_api_params
    self.meta.events.emit(
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/hooks.py", line 356, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "/Users/ardey/anaconda3/lib/python3.8/site-packages/botocore/handlers.py", line 231, in validate_bucket_name
    if not VALID_BUCKET.search(bucket) and not VALID_S3_ARN.search(bucket):
TypeError: expected string or bytes-like object

标签: pythonamazon-s3boto3

解决方案


错误在块中抛出if not VALID_BUCKET.search(bucket) and not VALID_S3_ARN.search(bucket)

根据docs, s3.Object 构造函数接受bucket_name(string) 和key(string) 作为参数。确保您将存储桶名称作为字符串而不是作为 Bucket 对象传递。


推荐阅读