在使用 Markdown 编写文章之后,经常需要发布到不同的平台,这里会遇到一个问题,文章的图片需要手动的进行上传,管理起来非常不方便,因此,强烈建议将图片统一上传到图床中,这样的话一篇文章就可以轻松的同步到各大平台上面了。下面,用 PHP 来实现该功能,选用 七牛云 作为图床

创建并进入项目

$ mkdir markdown-images-to-qiniu$ cd markdown-images-to-qiniu

安装七牛官方的扩展

$ composer require qiniu/php-sdk

实现思路很简单

● 读取 makrdown 文件

● 正则匹配出所有的图片

● 依次上传图片

● 将文章图片的地址替换为图床地址

● 保存替换后的文章

以下是具体的实现,首先在项目目录下创建脚本 index.php,

<?phprequire 'vendor/autoload.php';use Qiniu\Auth;use Qiniu\Storage\UploadManager;// 1. 读取 `makrdown` 文件$file = $argv[1];if(! file_exists($file) ){    return "找不到文件{$file}";}$orginalContent = file_get_contents($file);// 2. 正则匹配出所有的图片preg_match_all(    '/\!\[.*\]\(.+\)/',    $orginalContent,    $matches,    PREG_PATTERN_ORDER);$mdImageArr = $matches[0];if(! count($mdImageArr) ){    return "无需上传图片";}// 3. 依次上传图片$accessKey = '你的 AccessKey';$secretKey = '你的 SecretKey';$bucket = '你的七牛空间名'; // eg. mindgeek$url = "空间所绑定的域名";  // eg. http://qiniu.site.com$auth = new Auth($accessKey, $secretKey);$token = $auth->uploadToken($bucket);$uploadMgr = new UploadManager();$content = $orginalContent;foreach ($mdImageArr as $image) {    $start = mb_strpos($image, '](') + 2;    $localPath = mb_substr($image, $start, -1);    $extension = pathinfo($localPath)['extension'];    $uploadPath = uniqid(). ".". $extension;    list($ret, $error) = $uploadMgr->putFile($token, $uploadPath, $localPath);    if(! $error ){        // 4. 将文章图片的地址替换为图床地址        $content = str_replace($localPath, $url.$uploadPath, $content);        echo "{$uploadPath} 上传成功。\n";    } else {        echo "{$uploadPath} 上传失败。\n";    }}// 5. 保存替换后的文章file_put_contents($file, $content);

使用

$ php index.php test.md

更多相关文章

  1. php下载网络图片常用的三个方法总结
  2. php如何实现图片上传的封装
  3. 如何解决在php用gd库输出图片到微信浏览器出现乱码
  4. 在PHP中通过GD库创建简单的图片(图文详解)
  5. PHP在图片中用 imagettftext() 添加水印(图文详解)
  6. php怎么删除图片?
  7. php使用blob存取图片的信息(含源码)
  8. 新手应该知道的php多图片上传的实现
  9. php上传图片无法显示的问题

随机推荐

  1. 《深入理解 Java 虚拟机·第三版》读书笔
  2. 常见 JVM dump 指令整理
  3. 抽点时间写篇文章都是享受
  4. 学C Day-2
  5. 翻一翻 Java 的发展史,闻一闻那浓厚的咖啡
  6. 【Demo见真章】投稿赢HarmonyOS手机Beta
  7. 《MyBatis从入门到精通》读书笔记
  8. JVM 面试题解答(40道全)
  9. 到底什么是脏读和幻读?为啥网上答案不一?
  10. 报表的各种坑...