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

Docker部署的Flask微服务MP4播放器文件上传异常:文件被保存为'file'而非原文件名

Docker部署的Flask微服务MP4播放器文件上传异常:文件被保存为'file'而非原文件名

嘿,我帮你分析下这个问题——从你贴的日志和代码来看,核心问题出在上传服务向文件系统服务传递文件时,没有正确携带原始文件名和MIME类型,导致文件系统服务接收到的文件对象丢失了原信息,只能用默认的file作为文件名保存。

问题根源

你在upload_app.py里用requests.post发送文件时,直接传了Flask的FileStorage对象:

storage_response = requests.post('http://file-system-service:5003/store', files={'uploaded_file': file})

但requests在处理这种直接传递的FileStorage对象时,并不会自动携带原始文件名和文件类型,所以文件系统服务拿到的uploaded_file的文件名变成了默认的file,MIME类型为None(就是日志里显示的<FileStorage: 'file' (None)>)。

解决步骤

1. 修改上传服务的文件传递逻辑

在upload_app.py里,把发送文件的代码改成显式指定文件名、文件对象和MIME类型的格式:

# 替换原来的storage_response请求代码
storage_response = requests.post(
    'http://file-system-service:5003/store',
    files={'uploaded_file': (file.filename, file, file.content_type)}
)

这样requests就会把原始文件名和正确的MP4类型(比如video/mp4)传递给文件系统服务。

2. 确保文件系统服务正确使用原始文件名

你贴的file_system_app.py看起来和upload_app.py重复了,应该是粘贴错误。正确的/store端点代码应该是这样的(用来接收并保存文件):

from flask import Flask, request
import os

app = Flask(__name__)
app.secret_key = 'your_secret_key'

@app.route('/store', methods=['POST'])
def store_file():
    uploaded_file = request.files.get('uploaded_file')
    if not uploaded_file:
        return "No file received", 400
    
    # 确保上传目录存在(Docker容器里可能需要提前创建)
    upload_dir = '/app/uploads'
    if not os.path.exists(upload_dir):
        os.makedirs(upload_dir, exist_ok=True)
    
    # 使用原始文件名保存文件
    file_path = os.path.join(upload_dir, uploaded_file.filename)
    uploaded_file.save(file_path)
    
    # 返回保存的文件路径给上传服务
    return file_path, 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5003)

这里关键是用uploaded_file.filename获取原始文件名,而不是默认的file。

3. 额外检查项

  • Docker目录权限:确保文件系统服务容器里的/app/uploads目录有写入权限,可以在Dockerfile里添加:
    RUN mkdir -p /app/uploads && chmod 755 /app/uploads
    
  • 前端表单验证:确认前端表单的文件输入框name属性是file,且用户确实上传了带有正确扩展名的MP4文件(比如test.mp4)。
  • Requests版本:如果你的requests版本太旧,可能存在文件传递的bug,建议升级到最新稳定版:
    pip install --upgrade requests
    

备注:内容来源于stack exchange,提问作者qleqs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:29:28