首页 / Other / 搭建个人专属的Typora图片上传接口

搭建个人专属的Typora图片上传接口

摘要:搭建个人专属的Typora图片上传接口 Typora是一款非常受欢迎且功能强大的Markdown编辑器,很多人通过Markdown来写博客,上手很快、语法简单,但是也有一些缺点,上传图片基本上都是要带上图片网址,一般来说很少有人有属于自己的...

搭建个人专属的Typora图片上传接口

Typora是一款非常受欢迎且功能强大的Markdown编辑器,很多人通过Markdown来写博客,上手很快、语法简单,但是也有一些缺点,上传图片基本上都是要带上图片网址,一般来说很少有人有属于自己的图床,所以今天搭建属于自己的一个图片接口,主要分享一下搭建过程;

资源准备

1、首先有一台属于自己的Web服务器,PHP环境的,对硬件方面没有要求,不一定非得使用服务器,虚拟主机也可以;

2、一个域名,我们的Markdown文档是通过插入Url的方式插入图片的,为了保证图片访问有效最好是准备一个长期有效的域名;

搭建接口

话不多说,直接上代码:

<?php
header("Content-Type:text/html; charset=utf-8");
if(@$_SERVER['REQUEST_METHOD'] == 'POST'){
    $STORAGES = 'images';
    $BASEPATH = @$_SERVER['PHP_SELF'];
    $BASEPATH = mb_substr($BASEPATH,0,strripos($BASEPATH,"/")+1);
    if(@$_SERVER['HTTPS']){$SCHEMECH='https';}else{$SCHEMECH='http';}
    $DOWNPREX = $SCHEMECH . '://' . @$_SERVER['HTTP_HOST'] . $BASEPATH . $STORAGES;
    $DATEDIRS = date('Ymd');
    $DOWNLIST = [];
    @mkdir($STORAGES);
    @mkdir($STORAGES.'/'.$DATEDIRS);
    //检查文件类型和大小
    foreach(@$_FILES as $INDEX=>$THISFILE){
        if(in_array(pathinfo($THISFILE['name'])['extension'], ["jpg","jpeg","png","bmp"]) === FALSE || $THISFILE['size'] > 5242880){
            header("HTTP/1.1 403");
            echo "上传图片格式错误或大小超过5M";
            exit();
        }
    }
    //存储文件
    foreach(@$_FILES as $INDEX => $THISFILE){
        $THISFILE_NAME = $THISFILE['name'];
        $THISFILE_TEMP = $THISFILE['tmp_name'];
        $EXTENSION = pathinfo($THISFILE_NAME)['extension'];
        if(($EXTENSION == NULL)){
            $EXTENSION = 'jpg';
        }
        $THISFILE_SAVE = '/' . $DATEDIRS . '/' . substr(md5(time().mt_rand(100,999)),0,16) . '.' . $EXTENSION;
        move_uploaded_file($THISFILE_TEMP,$STORAGES . $THISFILE_SAVE);
        $DOWNLIST[] = $DOWNPREX . $THISFILE_SAVE;
    }
    foreach($DOWNLIST as $DOWN){
        echo $DOWN . PHP_EOL;
    }
}
elseif(@$_GET['html'] == '1'){
    echo <<<EOF
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>⽂件上传</title>
    </head>
    <body>
        <form id="form" action="#" method="post" enctype="multipart/form-data">
            <input type="file" name="file1"/>
            <input type="file" name="file2"/>
            <input type="submit" value="上传"/>
        </form>
    </body>
</html>
EOF;
}
else{
    header("HTTP/1.1 403");
}
?>

这是我花了三个小时写的PHP代码,主要就是将上传来的图片按日期存入目录并返回对应的图片Url,支持同时单个上传和多个上传;

这里我直接新建一个文本文件叫index.php(名字随意),将代码放进去(这里不要用记事本,用Notepad++、Sublime Text等等都可以),上传到服务器;

image-20220713110208926

我这里上传好了,我在代码里写了网页方式上传,方便调试;

image-20220713110648577

看到这里没有,只要在Url后面添加?html=1就可以访问网页上传了,否则用浏览器打开是会显示403的;

image-20220713110936475

我这里网页上只弄了两个上传文件的选项,以便于来测试多个图片上传,选择两张图片试一下;

image-20220713111735769

可见上传成功后给我们返回了两张图片的Url,并且是可以正常访问图片的;

image-20220713111917821

并且在PHP文件所在位置目录下自动创建了images目录,打开这个目录看一下;

image-20220713112201877

image-20220713112332229

可见自动按日期进行保存我们上传的图片;

在网页上测试上传图片没问题,现在就是如何让我们的Typora使用我们的接口;

使用接口

新建一个文本文件叫typoraUpload.bat,用文本编辑器打开把下面的代码放进去;

@echo off
set "api=%~1"
echo %api%|findstr "://" >nul
if not %errorlevel% == 0 (
    echo Upload api is not set.
    exit
)
set str=
for %%x in (%*) do ( if /i not "%api%" == "%%x" ( call set "str=%%str%% -F %%random:~0,3%%=@%%x" ) )
curl %str% %api% 2>nul
if not %errorlevel% == 0 (
    echo Connection failure.
)

然后将这个文件放入C:\Windows\System32目录下(目的是为了通过环境变量找到它)

image-20220713113354495

这个脚本的原理是调用curl.exe进行上传图片的,Win10及以上系统都自带curl,Linux系统的有能力的小伙伴可以自己编写,原理一样;

打开Typora设置->图像,上传服务选择Custom Command,然后按以下格式输入命令:typoraUpload 搭建好的图片上传接口地址,如图;

image-20220713113922242

点击验证图片上传选项,出现如下表示调试成功;

image-20220713114158107

编辑文档插入图片时将自动上传转换为超链接,我们来试一下;

image-20220713114737794

可见插入图片之后点击图片出现外链则表示上传成功,大功告成。

版权声明:《搭建个人专属的Typora图片上传接口》为作者阿凡原创文章,转载请注明原文地址。
最后编辑:2020-12-31
分享到:
发表评论

用心评论~