Amazon s3 aws通过s3无服务器提供文件

Amazon s3 aws通过s3无服务器提供文件,amazon-s3,aws-lambda,boto3,Amazon S3,Aws Lambda,Boto3,我正在尝试使用python中的lambda函数提供来自S3的音频文件 My lambda函数正在生成一条内部服务器错误消息,CloudWatch日志显示: 23:42:07响应的JSON序列化过程中发生错误:b'\xff\xfb\x90\xc4\x00\x00\… 下面是我的python lambda函数中的代码 import boto3 def getAudio(event, context): #[Validate permissions here] s3 = boto3.

我正在尝试使用python中的lambda函数提供来自S3的音频文件

My lambda函数正在生成一条
内部服务器错误
消息,CloudWatch日志显示:

23:42:07响应的JSON序列化过程中发生错误:b'\xff\xfb\x90\xc4\x00\x00\…

下面是我的python lambda函数中的代码

import boto3

def getAudio(event, context):
    #[Validate permissions here]
    s3 = boto3.client('s3')
    my_bucket = 'my-app'
    my_key = "audio/%s.mp3"%(event['pathParameters']['audio_id'])
    s3_object = s3.get_object(Bucket=my_bucket, Key=my_key)
    return s3_object['Body'].read()
检索和传递音频文件的适当方式是什么


我的端点是
https://1cbbkp15ci.execute-api.us-east-1.amazonaws.com/dev/assert/audio/adfk-m1

为S3创建签名URL并重定向到该URL的最干净方法

Lambda(验证权限并创建签名URL)-->重定向(302) -->S3存储桶中的实际文件

Python签名URL生成代码:

import boto3
import requests

# Get the service client.
s3 = boto3.client('s3')

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    }
)

# Use the URL to perform the GET operation. You can use any method you like
# to send the GET, but we will use requests here to keep things simple.
response = requests.get(url)
此外,如果您希望服务具有正确的内容类型。在S3中设置对象的内容类型。您可以使用命令行甚至boto3进行设置

aws s3api放置对象--bucket bucket--key foo.mp3--body foo.mp3 --内容类型音频/mpeg


希望有帮助。

为S3创建签名URL并重定向到该URL的最干净方法

Lambda(验证权限并创建签名URL)-->重定向(302) -->S3存储桶中的实际文件

Python签名URL生成代码:

import boto3
import requests

# Get the service client.
s3 = boto3.client('s3')

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    }
)

# Use the URL to perform the GET operation. You can use any method you like
# to send the GET, but we will use requests here to keep things simple.
response = requests.get(url)
此外,如果您希望服务具有正确的内容类型。在S3中设置对象的内容类型。您可以使用命令行甚至boto3进行设置

aws s3api放置对象--bucket bucket--key foo.mp3--body foo.mp3 --内容类型音频/mpeg


希望有帮助。

谢谢!使用这个并调整“ExpiresIn”参数正是我所需要的。很高兴看到它的帮助。谢谢!使用这个并调整“ExpiresIn”参数正是我所需要的。很高兴看到它有所帮助。