You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Elastic Beanstalk上传文件夹路径查询及Flask文件上传方案咨询

AWS Elastic Beanstalk Python平台文件上传实现方案

1. 环境可写入目录路径

Elastic Beanstalk的Python运行环境(基于Amazon Linux 2)有两个常用的可写入路径,可用于暂存上传的文本文件:

  • 系统临时目录 /tmp:所有进程默认拥有读写权限,EB不会限制该目录的写入操作,系统会定期清理目录内的过期文件,是暂存上传文件的首选路径。
  • 应用部署目录 /opt/python/current/app:为当前部署的Flask应用根目录,仅web运行用户有写入权限,存在权限冲突风险,不推荐作为临时存储路径。

2. Flask中转上传实现示例

你可以参考以下代码实现iOS端上传文件到EB、EB再转存到S3的逻辑:

from flask import Flask, request
import boto3
import os

app = Flask(__name__)
# EB环境默认已经分配了实例角色权限,不需要手动配置AK/SK
s3_client = boto3.client('s3')
TARGET_S3_BUCKET = "替换为你的S3存储桶名称"

@app.route('/text/upload', methods=['POST'])
def upload_text_file():
    # 校验上传参数
    if "text_file" not in request.files:
        return "缺少上传文件参数", 400
    upload_file = request.files["text_file"]
    if upload_file.filename.strip() == "":
        return "文件名为空", 400
    
    # 暂存文件到/tmp目录
    temp_file_path = os.path.join("/tmp", upload_file.filename)
    upload_file.save(temp_file_path)
    
    # 转存到S3
    s3_client.upload_file(temp_file_path, TARGET_S3_BUCKET, upload_file.filename)
    
    # 可选:删除本地临时文件释放存储空间
    if os.path.exists(temp_file_path):
        os.remove(temp_file_path)
    
    return "文件上传成功", 200

3. 更优方案推荐

不需要通过EB中转文件的预签名URL方案,完全满足iOS端无需安装boto3的要求,还能节省EB服务器的带宽和计算资源,大文件上传场景下优势更明显:

  1. 先在EB端实现一个获取S3预签名上传URL的接口,参考代码如下:
@app.route('/s3/presigned-url', methods=['GET'])
def generate_upload_url():
    file_name = request.args.get("file_name")
    # 签名有效期设置为3600秒,可根据需求调整
    presigned_url = s3_client.generate_presigned_url(
        ClientMethod="put_object",
        Params={
            "Bucket": TARGET_S3_BUCKET,
            "Key": file_name
        },
        ExpiresIn=3600
    )
    return {"upload_url": presigned_url}, 200
  1. iOS端先调用上述接口获取预签名URL,直接使用系统自带的HTTP PUT请求将文本文件上传到该URL即可,无需引入任何AWS相关依赖。

内容的提问来源于stack exchange,提问作者Orlando Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 13:15:00