self-media-james/scripts/upload_qiniu_004.py
邓文兵 62cda9f9a0 feat(article): 添加AI编程爆发趋势深度分析文章
- 新增004号文章《AI 编程爆发:程序员不写代码的时代真的来了》
- 添加AI编程工具进化路径图表(diagram-01-evolution.mmd)
- 添加2026年AI编程工具格局对比图(diagram-02-landscape.mmd)
- 添加Vibe Coding工作流示意图(diagram-03-vibe-coding.mmd)
- 添加AI工具使用率与职级关系图表(diagram-04-seniority.mmd)
- 添加开发者能力模型转变对比图(diagram-05-skills.mmd)
- 创建七牛云图片批量上传脚本(upload_qiniu_004.py)
2026-03-16 17:09:37 +08:00

64 lines
1.7 KiB
Python

"""上传文章 004 的所有图片到七牛云 OSS"""
import os
import glob
from qiniu import Auth, put_file, CdnManager
ACCESS_KEY = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
SECRET_KEY = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
BUCKET_NAME = 'union-saas'
CDN_DOMAIN = 'https://cdn.union.jxyunge.com'
UPLOAD_PREFIX = 'self-media/004/'
def upload_file(local_path, key):
"""上传单个文件到七牛"""
q = Auth(ACCESS_KEY, SECRET_KEY)
token = q.upload_token(BUCKET_NAME, key, 3600)
ret, info = put_file(token, key, local_path, version='v2')
if info.status_code == 200:
url = f'{CDN_DOMAIN}/{key}'
print(f' OK {os.path.basename(local_path)} -> {url}')
return url
else:
print(f' FAIL {os.path.basename(local_path)}: {info}')
return None
def main():
img_dir = os.path.join(os.path.dirname(__file__), '..', 'articles', '004')
# 收集所有 PNG 图片文件
files = sorted(glob.glob(os.path.join(img_dir, '*.png')))
urls = []
results = {}
for f in files:
name = os.path.basename(f)
key = UPLOAD_PREFIX + name
url = upload_file(f, key)
if url:
results[name] = url
urls.append(url)
print(f'\n===== 上传完成: {len(results)}/{len(files)} =====')
for name, url in results.items():
print(f'{name}: {url}')
# 刷新 CDN 缓存
if urls:
print('\n刷新 CDN 缓存...')
q = Auth(ACCESS_KEY, SECRET_KEY)
cdn = CdnManager(q)
ret, info = cdn.refresh_urls(urls)
if info.status_code == 200:
print('CDN 缓存刷新成功')
else:
print(f'CDN 刷新失败: {info}')
return results
if __name__ == '__main__':
main()