将多个文件从 S3 上传到 Frame IO

发布于 2025-01-13 02:36:30 字数 1890 浏览 4 评论 0原文

在 S3 中上传文件时,我触发 lambda 函数,它将生成 s3 url 并在 Frame IO 中创建文件。每当我尝试在 S3 中一次上传多个文件时,文件无法在 Frame IO 中正确创建并引发预览不支持错误(对于默认情况下支持的 mp4 文件)。为了解决这个问题,我尝试使用索引作为请求参数,但该参数仅适用于上传 2 或 3 个文件。如果我尝试上传更多文件,则会出现同样的错误。请在下面找到 lambda 函数代码

import requests
import boto3
import json
import urllib.parse
import mimetypes
from botocore.config import Config
import os

s3_client = boto3.client('s3', config = Config(signature_version='s3v4'))
client = boto3.client('ssm')

def lambda_handler(event, context):
    print(event)
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    if not key.endswith('/'):
        if key.find('/') >= 0:
            temp_key = key.rsplit('/', 1)
            key = temp_key[1]
        print(key)
        size = event['Records'][0]['s3']['object']['size']
        frameioIndex = int(client.get_parameter(Name='/frameio/asset/index_Dev')['Parameter']['Value']) - 1
        print(frameioIndex)
        s3_url = s3_client.generate_presigned_url("get_object", Params={"Bucket": bucket, "Key": key})
        response = requests.post(os.environ['FRAMEIO_BASE_API_URL'] + "assets" + "/" + os.environ['FRAMEIO_PROJECT_ID'] + "/" + "children",data=json.dumps({"type": "file","name": key,"filesize": size,"filetype": mimetypes.guess_type(key)[0],"source": {"url": s3_url},"index": frameioIndex}), headers={"Authorization":"Bearer " + os.environ['FRAMEIO_TOKEN'], "Content-type": "application/json"}) client.put_parameter(Name='/frameio/asset/index_Dev',Value=str(frameioIndex),Type='String',Overwrite=True)
        print(response)
        return {
            'statusCode': 200,
            'body': json.dumps('Successfully uploaded the asset!')
        }
    return {
        'statusCode': 200,
        'body': json.dumps('Uploaded object is not a file!')
    }

On file upload in S3, I am triggering lambda function which will generate s3 url and create file in Frame IO. Whenever I am trying to upload many files at once in S3, file is not creating properly in Frame IO and throwing Preview Unsupported Error (for mp4 files which is supported by default). To fix this issue, I tried to use index as a request parameter which worked out only on 2 or 3 files upload. If I am trying to upload more files, the same error arise. Please find the lambda function code below

import requests
import boto3
import json
import urllib.parse
import mimetypes
from botocore.config import Config
import os

s3_client = boto3.client('s3', config = Config(signature_version='s3v4'))
client = boto3.client('ssm')

def lambda_handler(event, context):
    print(event)
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    if not key.endswith('/'):
        if key.find('/') >= 0:
            temp_key = key.rsplit('/', 1)
            key = temp_key[1]
        print(key)
        size = event['Records'][0]['s3']['object']['size']
        frameioIndex = int(client.get_parameter(Name='/frameio/asset/index_Dev')['Parameter']['Value']) - 1
        print(frameioIndex)
        s3_url = s3_client.generate_presigned_url("get_object", Params={"Bucket": bucket, "Key": key})
        response = requests.post(os.environ['FRAMEIO_BASE_API_URL'] + "assets" + "/" + os.environ['FRAMEIO_PROJECT_ID'] + "/" + "children",data=json.dumps({"type": "file","name": key,"filesize": size,"filetype": mimetypes.guess_type(key)[0],"source": {"url": s3_url},"index": frameioIndex}), headers={"Authorization":"Bearer " + os.environ['FRAMEIO_TOKEN'], "Content-type": "application/json"}) client.put_parameter(Name='/frameio/asset/index_Dev',Value=str(frameioIndex),Type='String',Overwrite=True)
        print(response)
        return {
            'statusCode': 200,
            'body': json.dumps('Successfully uploaded the asset!')
        }
    return {
        'statusCode': 200,
        'body': json.dumps('Uploaded object is not a file!')
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘴硬脾气大 2025-01-20 02:36:30

通过将第 14 行中的变量名“key”更改为“filename”(key = temp_key[1])并在请求 API 中使用文件名解决了该问题。当我尝试覆盖文件名并将其传递给generate_presigned_url方法以生成s3 url时,发生了上述问题。

The issue resolved by changing variable name 'key' to 'filename' in line number 14 (key = temp_key[1]) and used filename in requests API. The above issue occurred as I tried to override the filename and passing it to generate_presigned_url method to generate s3 url.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文