怀旧网个人博客网站地址:怀旧网,博客详情:将markdown文件发布到博客解决图片问题
下载所需文件链接:网页链接
第一步:编写markdown
在本地先编写好markdown文件,里面可以包含图片数据(目前的图片数据在本地存放)
例如下:
第二步:转换本地文件数据
首先编写python脚本:
import glob
import base64
import re
def md_to_text(file_path):
with open(file_path, mode='r', encoding='utf-8') as f:
# print(f.read())
text = f.read()
# 正则表达式,匹配图片路径
pattern = r"!\[(.*?)\]\((.*?)\)"
# 使用正则表达式查找匹配项
matches = re.findall(pattern, text)
# 提取包含.png的图片路径
for match in matches:
image_path = match[1]
if ".png" in image_path or ".PNG" in image_path:
try:
with open(image_path, mode="rb") as f1:
image = f1.read()
image_base64 = str(base64.b64encode(image), encoding='utf-8')
temp = text.split(image_path)
text = temp[0] + "data:image/png;base64," + image_base64 + temp[1]
except:
print("路径出错")
with open(file_path.split(".")[0] + ".txt", mode='w', encoding='utf-8') as f:
f.write(text)
if __name__ == '__main__':
# 获取当前目录下所有.md文件的列表
md_files = glob.glob("*.md")
# 遍历列表并输出文件名
for file in md_files:
md_to_text(file)
也可以直接去下载:
第三步:执行脚本文件
将编写或者下载的python脚本放入一个文件夹
接着将编写的markdown文件放入脚本同一目录下
然后双击运行脚本---会自动生成一个.txt文本文件
第四步:生成数据上传到服务器
首先打开txt文件,复制里面的内容,并且打开服务器的上传markdown编辑器,并将复制的代码粘贴进去
然后直接保存上传即可
第五步:在服务器端处理base64数据
将前端发送过来的博客内容传入到如下方法
// 根路径定义:(比如windows就是c:/xxx,linux就可以是:/root/xxxx)
private profilePath = "XXXXX";
/**
* 传入一个字符串,将字符串里面的base64数据转存为image数据,并且将原内容修改为地址值
* @param originalData 需要修改保存的原数据
* @return 返回修改后的数据
*/
public String mdToUrl(String originalData){
// 正则表达式,匹配外部括号中的文本
Pattern pattern = Pattern.compile("!\\[.*?\\]\\((.*?)\\)");
Matcher matcher = pattern.matcher(originalData.toString());
// 获取外部括号中的文本
while (matcher.find()) {
String data = matcher.group(1);
String newFilePath = base64ToImage(data.replace("data:image/png;base64,", ""));
originalData = originalData.replace(data, newFilePath);
}
return originalData;
}
/**
* 将base64数据转成image数据,并保存当本地,然后返回保存图片的路径地址
* @param data 传入base64原数据
* @return 返回保存后的图片位置
*/
public String base64ToImage(String data){
String newFilePath = "data:image/png;base64," + data;
try {
// 将Base64数据解码为字节数组
byte[] imageBytes = Base64.getDecoder().decode(data);
String uid = UUID.randomUUID().toString();
// 指定输出文件路径
newFilePath = profilePath + "blogImageFile/" + uid +".png";
// 将字节数组写入到文件中
try (OutputStream stream = new FileOutputStream(newFilePath)) {
stream.write(imageBytes);
}
newFilePath = "/profile/blogImageFile/" + uid +".png";
} catch (Exception e) {
newFilePath = "data:image/png;base64," + data;
}
return newFilePath;
}
直接掉用mdToUrl()方法即可,参数就是博客的原内容
里面的执行逻辑是:将传入的base64内容读取出来,并且将base64数据转换成本地的图片文件,然后将本地文件路径替换为base64的所有内容,然后在web端打开的时候就是直接访问的本地的地址,而不是base64数据。