本地MD快捷转换到CSDN

原因

最近面试面试官说,CSDN若有不少文章或经常上传Githup是一个不错的加分项,不过我比较喜欢使用Typora写在本地,就想着把本地的MD文件上传到CSDN

原理

实际CSDN也是MD,不过本地图片转换比较麻烦,原来想把图片全部上传到阿里云,不过访问量会受限,但CSDN会自动对外链图片转换为内链,于是问题就解决了,可以先把图片上传到阿里云,把本地的MD图片文件地址更改为阿里云的,在复制到CSDN让它自动转换

开干

依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.1.0</version>
</dependency>

代码

public static void main(String[] args) throws IOException {
        if(args.length==1){
            conversion(args[0],null);
        }else if(args.length==2){
            conversion(args[0],args[1]);
        }else {
            System.out.println("用于把Typora文件的链接转换为CSDN链接" +
                    "\n需要输入文件路径和新文件名" +
                    "\n新文件名可以省略,若省略直接打印到控制台");
        }
    }

    private static final String ENDPOINT="你的阿里云ENDPOINT";
    private static final String ACCESS_KEY_ID ="你的阿里云ACCESS_KEY_ID ";
    private static final String SECRET="你的阿里云SECRET";
    private static final String BUCKET="你的阿里云BUCKET";
    private static final String BASE_PATH="image/";
    private static OSS ossClient;

    // 使用正则替换图片
    private static void conversion(String path,String newName) throws IOException {
        Pattern pattern = Pattern.compile("!\\[(.+)]\\((.+)\\)");
        Stream<String> lines = Files.lines(Paths.get(path));
        ossClient=new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID,SECRET);
        StringBuilder builder=new StringBuilder();
        lines.forEach(line -> {
            Matcher matcher = pattern.matcher(line);
            if(matcher.find()){
                String name=matcher.group(1);
                String url = matcher.group(2);
                builder.append("![").append(name).append("](").append(uploadImage(url)).append(")\n");
            }else {
                builder.append(line).append('\n');
            }
        });
        ossClient.shutdown();
        if(newName==null){
            System.out.println("----------------------生成内容----------------------");
            System.out.println(builder);
        }else {
            path=path.substring(0,path.lastIndexOf('\\'))+"/"+newName+".md";
            Files.write(Paths.get(path),builder.toString().getBytes());
        }
    }

    public static String uploadImage(String filePath){
        //调用方法实现上传
        File file = new File(filePath);
        String fileName=BASE_PATH+file.getName();
        ossClient.putObject(BUCKET, fileName,file);
        return "https://"+BUCKET+"."+ENDPOINT+"/"+fileName;
    }

不过每次都打开IDEA操作太麻烦了,这里main是接收参数的,专门为cmd设计
在pom中加如下面代码打包

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <!--带有包路径的MainClass -->
                            <mainClass>com.sk.typora.Typora2CSDN</mainClass>
                        </manifest>
                    </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>

打包并把jar包放到JAVA_HOME下就可以在任意CMD使用该命令了
在这里插入图片描述
转换后的文件(可见图片已经上传到阿里云了,可以直接复制到CSDN了)
在这里插入图片描述
使用其他图床也是类似的,最后不要忘了,定期清理阿里云的图片(当然也可以让图片互相覆盖,这样就不用清理了)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值