• 【picgo】【typora】自己服务器搭建自定义图床


    我的博客
    我的方案是自己的服务器+java项目接口+nginx+picgo配置的个人图床

    1、服务器

    自从种子习惯app突然关了导致写了好几年的日记全都没了,加上一些网盘也黄了,最近看有人分享百度网盘上传自己的课件还会无法访问,还有陆陆续续一些原本免费的东西突然收费(比如腾讯云的云函数),gitee也突然无法做图床。

    所以就不想把图片存在一些免费或收费的图床中,刚好自己有个腾讯云服务器,

    打算将图片存在自己的服务器中,这样感觉比较靠谱。

    2、nginx配置静态资源

    (1)设置nginx配置文件,访问XXX域名时,会自动访问到某个文件夹下的图片。

      server {
        listen 80 ;
        server_name *.yiyongok.com;
        index index.html;
        location / {
    	  #图床,访问picgo.yiyongok.com时,就会访问/tmp/upload下的静态资源
          if ($host ~ ^(picgo)\.yiyongok\.com) {
            root "/tmp/upload";
           }
        }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2)随便上传点图片到服务器目录/tmp/upload/test文件夹下

    (3)访问一下看看,nginx配置的成功~

    image-20221115103100371

    3、提供图片上传接口,上传图片到nginx配置的文件夹下

    (1)开发接口

    因为我的服务器有跑着的java项目,所以我就在java项目中随便加了个接口上传图片。

    public class ImageUploadController {
    		//图片保存的路径,和nginx中配置的一致
        @Value("${pic.path}")
        private String path;
        //图片访问的域名
        @Value("${pic.url}")
        private String URL_SERVER;
    
        //上传图片
        @PostMapping("/upload")
        public  String uploadImg(@RequestParam("imgFile") MultipartFile loadimg){
            //日期,将图片按照年月文件夹,比如2022,1月上传的图保存到202201文件夹下
            String format = DateUtil.format(new Date(), "yyyyMM");
            String pathFile =path+"/"+format;
            File f=new File(pathFile);
            if(!f.exists()){
                f.mkdirs();
            }
            //获取上传图片名称
            String filename = loadimg.getOriginalFilename();
            //拼接的图片路径
            String filepath=pathFile+"/"+filename;
            File file = new File(filepath);
            //上传图片
            try {
                loadimg.transferTo(file);
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //返回图片访问url
            return URL_SERVER+"/"+format+"/"+filename;
        }
    }
    
    • 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

    (2)测试接口上传

    image-20221115105238061

    上传后的返回值

    image-20221115104242179

    (3)可以正常访问

    image-20221115104609261

    4、picgo配置自定义图床并测试上传图片

    (1)下载picgo

    (2)下载自定义图床插件

    image-20221115104715811

    (3)配置自定义图床,就是3(2)中的那个接口和参数

    image-20221115105333528

    (4)测试picgo上传图片能否成功,随便截图,点这个按钮就能快速上传了

    image-20221115105501386

    相册中正常显示刚刚上传的图片,大功告成

    image-20221115105544623

    5、markdown笔记软件typora中设置picgo

    截图后粘贴到笔记时会自动上传图片到图床而且插入图片

    typora偏好设置

    image-20221114105310482

    image-20221114104356140

    6、增加签名

    上面例子上传图片没有安全性,可以自己加一些参数,然后添加一些签名算法

    参数在picgo,自定义图床设置那里配置。自定义body或者请求头上加签名参数(json)

    接口也用json接收核对一下就可以了

    7、其他

    虽然腾讯云服务器用了几年也没出现过宕机等现象,但是凡事都要有个planB

    所以后续慢慢考虑的事有

    1、图床文件定期自动备份,

    github上有项目可以命令行上传文件到百度网盘

    初步想法是服务器写个shell脚本定期备份图片到百度网盘

    2、迁移方案写好

    考虑到万一有一天服务器无法使用了,换台服务器的部署步骤,能在半小时-1小时以内部署完毕

    3、markdown笔记中批量更换域名的方案

    万一需要更换域名的话(比如腾讯突然限制微信里无法访问该域名了)

    再买个域名+笔记中批量修改url

    目前是看到有开源项目批量修改笔记中的链接,有时间的时候研究一下

  • 相关阅读:
    go语言实现二叉树的迭代后续遍历
    「互动有礼,感谢有你」参与互动就有机会获赠 Navicat Premium 16
    【深度学习】大模型卷到机器人上了
    安卓配置图标——Qt For Android
    leetcode数据结构与算法刷题(三)
    第 7 章 图形用户界面参考答案
    新版WordPress系统文章自动采集插件/Auto Post pro完美运行版/多线程采集(wp自动采集)
    执行上下文、执行栈
    Spring Boot2配置Swagger2生成API接口文档
    80. UE5 RPG 实现UI显示技能冷却进度功能
  • 原文地址:https://blog.csdn.net/mudarn/article/details/127862276