- 新增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)
64 lines
1.7 KiB
Python
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()
|