python - 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
解决方案
错误在块中抛出if not VALID_BUCKET.search(bucket) and not VALID_S3_ARN.search(bucket)
根据docs, s3.Object 构造函数接受bucket_name
(string) 和key
(string) 作为参数。确保您将存储桶名称作为字符串而不是作为 Bucket 对象传递。
推荐阅读
- python - docker-compose 不在 Python 应用程序中打印标准输出
- mongodb - 具有不同变体架构的产品
- oracle - 仅更新日期字段的时间部分
- sql - COUNT(*) 返回更少的行数
- php - Wordpress 中的调度程序
- cordova - android 7 及更高版本中的“通过 Intent.getData() 暴露在应用程序之外”错误
- c# - c#控制器中剃刀中selectList的值
- javascript - React 无法识别 DOM 元素上的 `eventKey`(也是 activeKey)道具
- apache-spark - 尝试在 Pyspark 中保存和加载逻辑回归模型时出错
- replace - 如何在pyspark中替换左连接表中的空值