阅读 400

minio应用搭建自己的图床工具

使用 java 实现的基于 minio 存储引擎的 typora 图片上传插件

上一篇我们介绍了minio的日常运维操作,今天我们基于 miniojava sdk 徒手撸一个 Typora 上传插件,本文步骤基于前文介绍,不了解的可以点击飞机去查看。

如果你不知道 typora 是什么的话,现在墙裂安利给你,Typora 一款 Markdown 工具。写 Markdown 文件的神器,简洁、方便、免费; 它最大的特点就是:所见即所得,无须分屏预览,或者开启新页面预览。

Why

你百度随便搜下 Typora 会发现大量使用 picgo/picgo-core 的文章,为什么不用他?

  • 配置繁琐

  • 配置繁琐

  • 配置繁琐

  • 炫技

使用说明

安装插件

假设你已经安装好java环境。

下载代码,编译源代码,或者直接使用编译好的jar包,把jar包放到固定目录,在jar包同目录下新建 conf.properties 文件。内容如下

# 上传的域名 host=http://127.0.0.1:9000 # MINIO_ACCESS_KEY accessKey=ProEXEC # MINIO_SECRET_KEY secretKey=ONRPROEXEC # 存储文件的bucket,不存在会自动创建 bucketName=testbucket # 文件前缀,用于区分文件,可以不配 customKey=javadev 复制代码

插件配置

windows

文件->偏好设置 ->图像

image-20210611151558461

mac

image-20210611151443840

设置自定义命令

image-20210611151714663

在命令栏输入 java -jar /{yourDir}/typora-minio-1.0-SNAPSHOT-jar-with-dependencies.jar

点击验证图片上传选项 出现下图说明图片上传成功

企业微信截图_c8ad5e96-2c56-4767-b419-cdb6925d48a3

插入图片可直接自动上传

代码讲解

POM依赖

为了方便运行我们使用了fatjar的形式进行打包,关键代码如下

依赖配置:

<dependency>     <groupId>io.minio</groupId>     <artifactId>minio</artifactId>     <version>8.3.1</version> </dependency> 复制代码

编译配置:

<build>     <plugins>         <!--             Apache Maven JAR Plugin             This plugin provides the capability to build jars.         -->         <plugin>             <groupId>org.apache.maven.plugins</groupId>             <artifactId>maven-jar-plugin</artifactId>             <version>3.2.0</version>             <configuration>                 <archive>                     <addMavenDescriptor>false</addMavenDescriptor>                 </archive>             </configuration>         </plugin>         <!--             Apache Maven Assembly Plugin             The Assembly Plugin for Maven is primarily intended to allow users to aggregate the project output             along with its dependencies, modules, site documentation, and other files into a single distributable archive.         -->         <plugin>             <groupId>org.apache.maven.plugins</groupId>             <artifactId>maven-assembly-plugin</artifactId>             <version>3.3.0</version>             <configuration>                 <archive>                     <manifest>                         <addClasspath>false</addClasspath>                     </manifest>                     <manifestEntries>                         <Main-Class>top.javadev.typora.minio.App</Main-Class>                         <Can-Redefine-Classes>true</Can-Redefine-Classes>                         <Built-By>javadev.top</Built-By>                         <Created-By>javadev.top</Created-By>                     </manifestEntries>                 </archive>                 <descriptorRefs>                     <descriptorRef>jar-with-dependencies</descriptorRef>                 </descriptorRefs>             </configuration>             <executions>                 <execution>                     <id>make-assembly</id>                     <phase>package</phase>                     <goals>                         <goal>single</goal>                     </goals>                 </execution>             </executions>         </plugin>     </plugins> </build> 复制代码

关键java代码

package top.javadev.typora.minio; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import io.minio.errors.MinioException; import top.javadev.typora.minio.config.UploadConfig; import top.javadev.typora.minio.util.Utils; /**  * @author javadev.top  * @date 2021/10/11  */ public class App {     public static void main(String[] args) {         if (args.length > 0) {             App app = new App();             UploadConfig config = Utils.loadConfig();             for (String path : args) {                 String url = app.upload(path, config);                 // Typora 会提取脚本的输出作为地址,将markdown上图片链接替换掉                 System.out.println(config.getHost() + "/" + config.getBucketName() + "/" + url);             }         } else {         }     }     /**      * 上传      *      * @param path      *            文件路径      * @param config      *            配置信息      * @return {@link String}      */     public String upload(String path, UploadConfig config) {         StringBuilder url = new StringBuilder();         try {             MinioClient minioClient = MinioClient.builder().endpoint(config.getHost())                 .credentials(config.getAccessKey(), config.getSecretKey()).build();             boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(config.getBucketName()).build());             if (!found) {                 minioClient.makeBucket(MakeBucketArgs.builder().bucket(config.getBucketName()).build());             }             if (config.getCustomKey() != null && config.getCustomKey().trim().length() > 0) {                 url.append(config.getCustomKey()).append("/");             }             url.append(System.nanoTime());             url.append(Utils.getSuffix(path));             minioClient.uploadObject(UploadObjectArgs.builder().bucket(config.getBucketName()).object(url.toString())                 .filename(path).build());         } catch (MinioException e) {             System.out.println("Error occurred: " + e);             System.out.println("HTTP trace: " + e.httpTrace());         } catch (IOException e) {             e.printStackTrace();         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();         } catch (InvalidKeyException e) {             e.printStackTrace();         }         return url.toString();     } } 复制代码

关于minio的使用就到这里了。


作者:一个程序猿的异常
链接:https://juejin.cn/post/7018112112048209956


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐