java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

Typora用命令行快速实现图床

本文适用于MAC系统,Typora手写个命令行实现Typora图床效果

1. Typora 支持的图床:

  • iPic
  • uPic
  • PicGo-core(命令模式)
  • PicGo.app
  • Custom Command

image-20220812145822627

2.写个命令行upload-image.sh

#!/bin/bash

result=()
# 传文件
function upload() {
    t=$(curl -XPOST -s -F"img=@$1" -H'token:12AC'  http://localhost/demo/imgupload/upload.php)
    result=(${result[@]} "http://localhost/demo/imgupload/${t}")
}
while [ $# -gt 0 ]; do
    upload "$1" $index
    shift
done
## //输出格式
echo "Upload Success:"
for i in ${result[*]}; do
echo $i;
done

3.配置本地php环境

准备一个文件 upload.php 在我本地的路劲为 http://localhost/demo/imgupload

<?php
/**
这个文件很单纯,负责上传一张图片,然后返回这个图片的服务器地址
2022-08-12
*/

//创建文件夹
function mkdirs($path)
{
   if (!file_exists($path))
   {
      mkdirs(dirname($path));
      mkdir($path, 0777);
   }
}
//var_dump($_FILES); // 区别于$_POST、$_GET
$file = $_FILES["img"];
// 先判断有没有错
if ($file["error"] == 0) {

 // 成功 
 // 判断传输的文件是否是图片,类型是否合适
 // 获取传输的文件类型

 $typeArr = explode("/", $file["type"]);
 if($typeArr[0]== "image"){
  // 如果是图片类型
  $imgType = array("png","jpg","jpeg");
  if(in_array($typeArr[1], $imgType)){ // 图片格式是数组中的一个

   // 类型检查无误,保存到文件夹内
   // 给图片定一个新名字 (使用时间戳,防止重复)
   $dir = "upfiles/".date("Y").date("m");
   srand ((double) microtime() * 948625); 

   //生成随机文件名
   $targetname =time();
   $targetname .= rand();

   mkdirs($dir);
   $imgname = $dir."/".$targetname.".".$typeArr[1];

   // 将上传的文件写入到文件夹中
   // 参数1: 图片在服务器缓存的地址
   // 参数2: 图片的目的地址(最终保存的位置)
   // 最终会有一个布尔返回值
   $bol = move_uploaded_file($file["tmp_name"], $imgname);

   if($bol){
      echo $imgname;
   } else {
      echo "上传失败!";
   };
  };

 } else {
  // 不是图片类型
  echo "没有图片,再检查一下吧!";
 };
}else{
   // 失败
   echo $file["error"];

};

?>

为了测试upload.php文件正常工作我写了个html

<!DOCTYPE html>

<html>

 <head>

  <meta charset="UTF-8">

  <title></title>

 </head>

 <body> 

  <form action="upload.php" method="post" enctype="multipart/form-data">

   Upload Img:<input type="file" name="img"/>

   <input type="submit" value="Upload"/>

  </form>

 </body>

</html>

image-20220812151314070

确认这个接收的php文件是可以正常使用的

4.typora调用命令的模式

upload-image.sh "aa.png" "bb.png" "cc.png"

可以在本地命令行测试下

./upload-image.sh "aa.png"

5.回到本文最上方那里,设置这个文件

然后,重启动Typora就可以使用图床了。

测试成功以后把本地的文件打包丢到自己的服务器上,就可以了

6.安全加固

毕竟端口放在外面的一个图片上传很危险

upload.php文件前面增加几句token判断

$token = $_SERVER['HTTP_TOKEN'];
if($token!='my123'){
   echo "forbidden please contact manager";
   exit;
}

upload-image.sh文件访问也修改下

function upload() {
    t=$(curl -XPOST -s -F"img=@$1" -H'token:my123'  http://localhost/demo/imgupload/upload.php)
    result=(${result[@]} "http://localhost/demo/imgupload/${t}")
}

就是把-H'token:' 哪里也设置成本地sh文件相同的密码即可


This entry was posted in PHP and tagged , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/typora-pic-bed-mac/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply