原因 由于SM.MS图床已经暂停对大陆开放,图片无法正常加载,需要迁移图床
步骤 申请腾讯云COS对象存储的流程不多赘述,自行百度
1.安装第三方库 命令👇pip install -U cos-python-sdk-v5
如果网络不好可以使用以下命令👇pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com -U cos-python-sdk-v5
2.在电脑上创建三个文件夹 Files
:用来存放待处理的.md文件Temp
:用来存放从原图床下载过来的图片New
:用来存放替换图片连接后,新的.md文件 文件路径最好简单一点,待会需要用到,我这里创建在桌面
3.将以下信息替换为自己的信息 secret_id
:用户的 SecretIdsecret_key
:用户的 Secretkeyregion
:用户存储桶所在的地域token
:设置为 None 即可app_id
:用户的 APPID 腾讯云的桶名形式为 桶名
- APPIDbucket_name
:用户的桶名
主函数中的 path ,代表的是用户的待处理 md 文件所在的文件夹路径replace_image_url
函数中的 temp_path
:临时存放原图床下载的图片的文件夹路径replace_image_url
函数中的 new_md_path
:替换链接完成后,新生成的 md 文件存放的文件夹路径download_image
函数中的 headers
:自己的浏览器随便打开一个网页,【右键】→【检查】→【网络】,左边框中随便点一个文件,右边框中点击【标头】,下拉到最下边,User-Agent 就是,粘贴复制到程序中
运行时可能会连接sm.ms超时,因为禁止大陆访问,所以需要搭梯子,搭完梯子可能又会遇到连接腾讯云超时,这时候只需要在v2RayN中自行设置让sm.ms走代理,而腾讯云不走代理即可
4.运行程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 import reimport osimport timefrom qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport requestsdef get_md_file_list (dir_path: str ) -> list : mds = [] for file in os.listdir(dir_path): if file.endswith(".md" ): mds.append(os.path.join(dir_path, file)) return mds def download_image (image_name: str , image_url: str ) -> None : time.sleep(2 ) print ("开始处理图片 " + image_name) headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" } r = requests.get(url=image_url, headers=headers) image_save = r"C:\Users\87613\Desktop\Temp\\" + image_name if r.status_code == 200 : with open (image_save, "wb" ) as f: f.write(r.content) del r print ("图片 {0} 下载成功 ..." .format (image_name)) def upload_image (image_url: str ) -> str : time.sleep(2 ) user_info = { 'secret_id' : '' , 'secret_key' : '' , 'region' : '' , 'token' : None , 'app_id' : '' , 'bucket_name' : '' } config = CosConfig(Region=user_info['region' ], SecretId=user_info['secret_id' ], SecretKey=user_info['secret_key' ], Token=user_info['token' ]) client = CosS3Client(config) object_key = image_url.split("\\" )[-1 ] with open (image_url, 'rb' ) as fp: client.put_object( Bucket=user_info['bucket_name' ] + '-' + user_info['app_id' ], Body=fp, Key=object_key, EnableMD5=True , StorageClass='STANDARD' , ContentType='text/html; charset=utf-8' ) temp_name = object_key.split("\\" )[-1 ] print ("图片 {0} 上传成功 ..." .format (temp_name)) new_url = client.get_object_url( Bucket=user_info['bucket_name' ] + '-' + user_info['app_id' ], Key=object_key ) print ("图片 {0} 获取新链接成功 ..." .format (temp_name)) return new_url def replace_image_url (md_path: str ) -> None : temp_path = r"C:\Users\87613\Desktop\Temp\\" new_md_path = r"C:\Users\87613\Desktop\New\\" md_name = md_path.split("\\" )[-1 ] print ("================== 开始处理文件 {0} ==================" .format (md_name)) with open (md_path, "r" , encoding="utf-8" ) as f: files = "" for s in f.readlines(): files += s images_list = re.findall(r"!\[(.*?)\]\((.*?)\)" , files) new_url_list = [] for image in images_list: download_image(image[0 ], image[1 ]) new_image_url = upload_image(temp_path + "\\" + image[0 ]) new_url_list.append(new_image_url) new_files = "" with open (md_path, "r" , encoding="utf-8" ) as f: for s in f.readlines(): new_files += s for i in range (len (images_list)): new_files = new_files.replace(images_list[i][1 ], new_url_list[i]) print ("正在替换图片 {0} ..." .format (images_list[i][0 ])) with open (new_md_path + "\\" + md_name, "w" , encoding="utf-8" ) as ff: ff.write(new_files) print ("================== 文件 {0} 处理完成 !==================\n" .format (md_name)) if __name__ == '__main__' : path = r"C:\Users\87613\Desktop\Files\\" md_list = get_md_file_list(path) for md_file in md_list: replace_image_url(md_file)
5.将生成的新.md文件替换原来的.md文件