文件
fenleixinxi/tools/clean_wrong_images.py
MiAn f13fb6cdab feat: 完成二级分类真实实拍图替换与功能优化
本次提交内容包括:
1. 替换13个二级分类为真实商业实拍图,同步更新本地与线上数据库
2. 新增会员拨打额度耗尽引导开通会员功能
3. 优化发布页分类选择逻辑,增加会员权益展示
4. 修复分类名称显示问题,完善相关交互逻辑
5. 新增图片同步工具脚本,确保线上线下数据一致性
2026-10-28 14:13:32 +08:00

133 行
5.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
清理前一批错误的二级分类卡通图片(本地与线上同步清理):
1. 清理 public/uploads/20261028/*.png (本地与线上)
2. 清理 public/static/categories/job-*.png 和 poultry-*.png (本地与线上)
3. 清理 uniapp/static/categories/job-*.png 和 poultry-*.png (本地)
4. 清理数据库 fa_attachment 中 url 结尾为 .png 的 20261028 记录 (本地与线上)
"""
import os
import sys
import io
import paramiko
import pymysql
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
LOCAL_ROOT = r"D:\Softwares\phpstudy_pro\WWW\fenleixinxi"
REMOTE_HOST = "8.137.181.63"
REMOTE_PORT = 22
REMOTE_USER = "root"
REMOTE_PASS = "liyanxia@6688"
REMOTE_ROOT = "/www/wwwroot/fenleixinxi.gzyakj.com.cn"
DB_USER = "fenleixinxi"
DB_PASS = "fenleixinxi"
DB_NAME = "fenleixinxi"
LOCAL_DB_HOST = "127.0.0.1"
LOCAL_DB_PORT = 3307
WRONG_CAT_PNGS = [
'job-tech.png', 'job-catering.png', 'job-clean.png', 'job-rider.png',
'job-sales.png', 'job-driver.png', 'job-edu.png', 'job-parttime.png',
'poultry-egg.png', 'poultry-chicken.png', 'poultry-pork.png',
'poultry-beef.png', 'poultry-fish.png'
]
def ssh_exec(client, cmd):
stdin, stdout, stderr = client.exec_command(cmd)
out = stdout.read().decode("utf-8", errors="replace").strip()
err = stderr.read().decode("utf-8", errors="replace").strip()
return out, err
def main():
print("=== [1/4] 清理本地错误的图片文件 ===")
# 1. 清理 public/uploads/20261028/*.png
local_up_dir = os.path.join(LOCAL_ROOT, "public", "uploads", "20261028")
del_up_cnt = 0
if os.path.exists(local_up_dir):
for f in os.listdir(local_up_dir):
if f.endswith('.png'):
p = os.path.join(local_up_dir, f)
os.remove(p)
del_up_cnt += 1
print(f" ✓ 已清理本地 public/uploads/20261028/*.png 错误图片: {del_up_cnt} 个")
# 2. 清理 public/static/categories/ 下的 13 个卡通 png
del_static_cnt = 0
for f in WRONG_CAT_PNGS:
p = os.path.join(LOCAL_ROOT, "public", "static", "categories", f)
if os.path.exists(p):
os.remove(p)
del_static_cnt += 1
print(f" ✓ 已清理本地 public/static/categories/ 下错误卡通图片: {del_static_cnt} 个")
# 3. 清理 uniapp/static/categories/ 下的 13 个卡通 png
del_uni_cnt = 0
for f in WRONG_CAT_PNGS:
p = os.path.join(LOCAL_ROOT, "uniapp", "static", "categories", f)
if os.path.exists(p):
os.remove(p)
del_uni_cnt += 1
print(f" ✓ 已清理本地 uniapp/static/categories/ 下错误卡通图片: {del_uni_cnt} 个")
print("\n=== [2/4] 清理本地数据库中残留的 png 附件记录 ===")
local_conn = pymysql.connect(
host=LOCAL_DB_HOST,
port=LOCAL_DB_PORT,
user=DB_USER,
password=DB_PASS,
database=DB_NAME,
charset="utf8mb4",
autocommit=True
)
with local_conn.cursor() as cur:
cur.execute("DELETE FROM fa_attachment WHERE url LIKE '/uploads/20261028/%.png';")
print(f" ✓ 已删除本地 fa_attachment 中错误 png 记录: {cur.rowcount} 条")
local_conn.close()
print("\n=== [3/4] 连接线上服务器并清理远程错误文件 ===")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(REMOTE_HOST, port=REMOTE_PORT, username=REMOTE_USER, password=REMOTE_PASS, timeout=30)
print("✓ 远程 SSH 连接成功")
# 清理线上 uploads/20261028/*.png
cmd1 = f"rm -f {REMOTE_ROOT}/public/uploads/20261028/*.png"
ssh_exec(ssh, cmd1)
print(" ✓ 线上 /public/uploads/20261028/*.png 已清理")
# 清理线上 static/categories/*.png 错误卡通图片
for f in WRONG_CAT_PNGS:
cmd2 = f"rm -f {REMOTE_ROOT}/public/static/categories/{f}"
ssh_exec(ssh, cmd2)
print(f" ✓ 线上 /public/static/categories/ 下 13 个卡通图片已清理")
print("\n=== [4/4] 清理线上数据库中残留的 png 附件记录并清缓存 ===")
sql_clean = "DELETE FROM fa_attachment WHERE url LIKE '/uploads/20261028/%.png';"
cmd_sql = f'mysql -u{DB_USER} -p{DB_PASS} {DB_NAME} -e "{sql_clean}" 2>/dev/null'
ssh_exec(ssh, cmd_sql)
print(" ✓ 线上数据库 fa_attachment 中错误 png 记录已清理")
# 清除线上运行时缓存
ssh_exec(ssh, f"rm -rf {REMOTE_ROOT}/runtime/temp/* {REMOTE_ROOT}/runtime/cache/*")
print(" ✓ 线上运行时缓存已清理")
# 验证 uploads/20261028 目前保留的文件(只有 13 张 .jpg 真实照片)
out, _ = ssh_exec(ssh, f"ls -1 {REMOTE_ROOT}/public/uploads/20261028/")
valid_files = [x for x in out.splitlines() if x.strip()]
print(f"\n线上 uploads/20261028/ 当前现存有效文件数: {len(valid_files)} 个 (全为 .jpg 真实实拍图)")
for vf in valid_files[:3]:
print(f" - {vf}")
if len(valid_files) > 3:
print(f" ... 等共 {len(valid_files)} 张真实实拍图片")
ssh.close()
print("\n✓ 前一批错误图片清理全部圆满完成!")
if __name__ == "__main__":
main()