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

Python通过Post向EC2上的Flask容器上传图片时文件损坏问题求助

解决Flask文件上传损坏的问题

以下是几个具体的排查和解决方向:

1. 改用Flask内置的FileStorage.save()方法

手动读取文件流可能存在未完整读取的情况,Flask提供的save()方法能更可靠地处理上传文件:

if 'file' not in request.files:
    return 'No file part in the request'

file = request.files['file']
if file.filename == '':
    return 'No selected file'

file_path = 'input.png'
file.save(file_path)  # 替换手动read+write的逻辑

2. 避免请求头干扰multipart格式

使用requests.post()的files参数时,库会自动生成正确的multipart/form-data请求头。自定义headers可能破坏这个格式,建议调整API key的传递方式:

方案1:将API key放在URL参数中

with open(file_path, 'rb') as image_file:
    params = {'x-api-key': apiKey}
    files = {'file': ('image.png', image_file, 'image/png')}
    
    response = requests.post(url, files=files, params=params)

方案2:保留headers但不手动设置Content-Type

确保requests自动处理multipart格式的请求头:

with open(file_path, 'rb') as image_file:
    headers = {'x-api-key': apiKey}
    files = {'file': ('image.png', image_file, 'image/png')}
    
    response = requests.post(url, files=files, headers=headers)

3. 验证文件传输完整性

对比本地和服务器端文件的大小,确认是否被截断:

  • 本地执行:ls -lh testFolder/input.png
  • 服务器端(进入Docker容器)执行:ls -lh input.png

若大小不一致,可在Flask中增加上传大小限制:

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 设置为16MB,可按需调整

4. 检查Docker容器的文件写入权限

确保容器内保存文件的目录有完整写入权限,可通过挂载本地目录或修改容器内目录权限解决:

# 启动容器时挂载本地目录示例
docker run -v /host/local/folder:/container/target/folder your-flask-image

5. 调试请求响应信息

在客户端打印响应状态和内容,确认服务器是否正确接收请求:

response = requests.post(url, files=files, headers=headers)
print(f"Response status: {response.status_code}")
print(f"Response content: {response.text}")

内容的提问来源于stack exchange,提问作者Paul Franken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:43:14