Typora+MinIO+Java程式碼打造舒適寫作環境
作者:IT王小二
部落格:http://itwxe.com
前面小二介紹過使用Typora+PicGo+LskyPro打造舒適寫作環境
,那時候需要使用水印功能,但是小二在升級LskyPro2.x版本發現有很多不如人意的東西,遂棄用LskyPro使用MinIO結合程式碼實現自己需要的圖床功能,也適合以後擴充套件功能。
安裝MinIO
安裝參考MinIO官網,或者參考小二的部落格,搜尋關鍵詞 → Linux安裝MinIO
。
安裝完成之後使用域名對映好後臺服務,小二使用nginx配置域名,配置參考如下。
```nginx server { listen 443 ssl; server_name minio.itwxe.com; include /usr/local/nginx/conf/conf.d/common.conf; access_log logs/minioAccess.log;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 443 ssl;
server_name minio-console.itwxe.com;
include /usr/local/nginx/conf/conf.d/common.conf;
access_log logs/minioAccess.log;
location / {
proxy_pass http://127.0.0.1:9020;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
其中common.conf
為域名通用配置。
nginx
ssl_certificate /usr/local/nginx/ssl/fullchain.crt;
ssl_certificate_key /usr/local/nginx/ssl/itwxe.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
ssl_prefer_server_ciphers on;
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
client_max_body_size 100m;
配置好之後訪問http://minio-console.itwxe.com
即可訪問後臺。
同時為了儲存桶圖片所有人可以訪問,需要將儲存桶設定為公開。
Java程式碼上傳圖片
Java程式碼為個人定製使用,僅供參考,整體專案目錄結構。
使用maven搭建Java專案,引入依賴,pom.xml如下。
```xml
<groupId>com.itwxe</groupId>
<artifactId>minio-typora</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.4</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
增加配置類MinioConfig。
```java package com.itwxe.config;
/ * @author itwxe * @since 2022/9/29 / public class MinioConfig {
/**
* 請求地址,需修改成自己的服務地址
*/
public static final String ENDPOINT = "http://minio.itwxe.com";
/**
* 使用者名稱,需修改為自己的使用者名稱
*/
public static final String ACCESS_KEY = "admin";
/**
* 祕鑰,需修改為自己的密碼
*/
public static final String SECRET_KEY = "12345678";
/**
* 儲存桶名稱
*/
public static final String BUCKET = "img";
} ```
增加主類進行圖片上傳。
```java package com.itwxe;
import com.itwxe.config.MinioConfig; import io.minio.MinioClient; import io.minio.UploadObjectArgs;
import java.time.LocalDateTime; import java.time.ZoneOffset;
/ * @author itwxe * @since 2022/9/29 / public class MinioTyporaApplication {
/**
* 部落格圖片子路徑
*/
private static final String IMG_DIR = "blog";
public static void main(String[] args) {
try {
// 使用MinIO伺服器平臺、其訪問金鑰和金鑰建立minioClient。
MinioClient minioClient = MinioClient.builder()
.endpoint(MinioConfig.ENDPOINT)
.credentials(MinioConfig.ACCESS_KEY, MinioConfig.SECRET_KEY)
.build();
// 部落格文章唯一連結id
String blogPermalink = args[0];
if (blogPermalink.length() > 8) {
System.out.println("文章唯一id未設定!");
return;
}
// 迴圈上傳圖片
for (int i = 1; i < args.length; i++) {
String arg = args[i];
// 生成自定義檔名, 規則為部落格唯一連結id_時間戳+隨機2位數
String fileSuffix = arg.substring(arg.lastIndexOf("."));
String fileName = String.format("%s_%s%02d%s", blogPermalink, LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli(), (int) (Math.random() * 100), fileSuffix);
// 上傳圖片
minioClient.uploadObject(UploadObjectArgs.builder()
.bucket(MinioConfig.BUCKET)
.object(String.format("/%s/%s", IMG_DIR, fileName))
.filename(arg)
.build());
// 打印出來的字元會返回給typora
System.out.println(String.format("%s/%s/%s/%s", MinioConfig.ENDPOINT, MinioConfig.BUCKET, IMG_DIR, fileName));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
} ```
typora測試上傳圖片
為方便使用,使用mvn clean package
打包成jar包,開啟typora,偏好設定 -> 影象設定。
java
java -jar /Users/itwxe/minio-typora.jar fd52d52a
其中 /Users/itwxe/minio-typora.jar
為jar包路徑,fd52d52a
為小二個人定製的文章唯一id。
點選驗證圖片上傳選項,正常返回測試路徑,同時圖片瀏覽器可以訪問則代表成功。