python - 使用Python将文件上传到S3(保留原始文件夹结构)并具有正确的MIME类型

标签 python amazon-s3 mime-types boto3

默认情况下,如果未显式设置 ContentTypeboto3 会将文件上传到 s3,内容类型为 Content-Type:binary/八位字节流。当使用 s3 作为静态托管时,这并不好。截至目前,there is PR为此。

最佳答案

import boto3
import os
import mimetypes

def upload_files(path):
    session = boto3.Session(
        aws_access_key_id='YOUR_AWS_ACCESS_KEY_ID',
        aws_secret_access_key='YOUR_AWS_SECRET_ACCESS_KEY_ID',
        region_name='YOUR_ACCOUNT_REGION'
    )
    s3 = session.resource('s3')
    bucket = s3.Bucket('YOUR_BUCKET_NAME')

    for subdir, dirs, files in os.walk(path):
        for file in files:
            full_path = os.path.join(subdir, file)
            file_mime = mimetypes.guess_type(file)[0] or 'binary/octet-stream'
            with open(full_path, 'rb') as data:
                bucket.put_object(Key=full_path[len(path)+1:], Body=data, ContentType=file_mime)

if __name__ == "__main__":
    upload_files('/path/to/your/folder')

关于python - 使用Python将文件上传到S3(保留原始文件夹结构)并具有正确的MIME类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50870070/

相关文章:

python - 识别列表列表中具有 3 个共同元素的列表

java - 在 Android 中,如何检查 webview 中加载的 URL 是否是图像?

ios - 亚马逊网络服务 S3 超时

ruby-on-rails - 在 .bashrc 环境变量中存储 Amazon S3 凭证会导致 Rails 应用程序失败

angular - GCP App Engine/Angular - 无法加载模块脚本 : The server responded with a non-JavaScript MIME type of "text/html"

python-3.x - Tornado:stream_request_body 输出的 mime 类型

python - 使用Python从html文件中提取字符串(beautifulsoup?)

python - 对象 ListView Python : Filtering

python - Pandas Dataframe 如何合并列

android - 如何注销 aws cognito - android?