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

Docker化FastAPI项目:能否直接从MySQL BLOB取CV用于Selenium自动投递

解决方案:无需文件服务器/主机存储,直接从数据库读取BLOB处理

不用折腾文件服务器或者把文件存到Docker主机,直接从数据库读BLOB数据,在容器内部生成临时文件给Selenium用就行,用完就删,全程闭环在容器里。

具体实现步骤

1. 从MySQL读取BLOB格式的CV数据

在FastAPI代码里直接查询数据库,拿到CV的字节数据和对应的文件名(建议把文件名也存在数据库里,方便后续生成临时文件时保持格式一致):

import mysql.connector
from mysql.connector import Error

def fetch_cv_from_db(user_id):
    try:
        # 注意这里的host填Docker Compose里的MySQL服务名
        conn = mysql.connector.connect(host="mysql", database="your_db_name", user="db_user", password="db_pass")
        cursor = conn.cursor()
        # 假设表结构里cv_blob存二进制数据,filename存文件名
        query = "SELECT cv_blob, filename FROM user_cvs WHERE user_id = %s"
        cursor.execute(query, (user_id,))
        result = cursor.fetchone()
        return (result[0], result[1]) if result else (None, None)
    except Error as e:
        print(f"数据库读取失败: {e}")
        return (None, None)
    finally:
        if conn.is_connected():
            cursor.close()
            conn.close()

2. 在容器内生成临时文件供Selenium使用

用Python的tempfile模块在容器内部创建临时文件,把BLOB字节写入进去——这个文件只存在于容器的临时目录,不会写到Docker主机,用完直接删除:

import tempfile
import os
from selenium import webdriver
from selenium.webdriver.common.by import By

def auto_apply_with_cv(cv_blob, filename):
    # 生成和原CV同后缀的临时文件,delete=False确保写入后不被立即删除
    with tempfile.NamedTemporaryFile(suffix=f".{filename.split('.')[-1]}", delete=False) as temp_f:
        temp_f.write(cv_blob)
        temp_path = temp_f.name

    try:
        # 初始化Chrome(适配Docker环境的配置)
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--headless=new")
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("--disable-dev-shm-usage")
        driver = webdriver.Chrome(options=chrome_options)

        # 打开jobserve的职位投递页面
        driver.get("https://www.jobserve.com/your-apply-url")

        # 定位文件上传输入框,传入临时文件路径
        upload_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
        upload_input.send_keys(temp_path)

        # 后续完成投递的其他操作(填写表单、提交等)
        # ...
    finally:
        # 清理资源:关闭浏览器+删除临时文件
        driver.quit()
        os.unlink(temp_path)

3. Docker环境适配要点

  • 如果你是用Docker Compose部署,推荐把Selenium单独做成一个服务(比如用官方selenium/standalone-chrome镜像),FastAPI容器通过网络访问Selenium服务,避免在FastAPI容器里安装Chrome的繁琐配置。
  • 不需要给容器挂载任何主机目录,临时文件默认存在容器的/tmp目录,容器重启后会自动清理。

为什么不选文件服务器?

  • 增加不必要的复杂度:额外维护文件服务器会提升部署和运维成本。
  • 避免数据不一致:CV存在数据库里,直接读取能保证文件和数据库记录的一致性。
  • 减少安全风险:不需要开放文件存储的访问权限,降低攻击面。

内容的提问来源于stack exchange,提问作者OLUYELE SUNDAY ANTHONY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:46:11