Typora自定义上传图片到服务器图床(java实现)

本文介绍了如何使用Typora结合JavaSpringBoot和Hutool库,实现自定义图片上传到个人服务器的功能。通过创建本地jar包,调用CustomCommand,将图片发送到服务器存储并返回URL。此外,还涉及到Typora的配置以及服务器端的接口和配置文件。
摘要由CSDN通过智能技术生成

日常使用Typora写博客,遇到图片需要手动上传的服务器映射,Typora软件新版本支持自定义上传到图床本篇记录上传到本人服务器中。

实现步骤(java实现):

1、Typora使用Custom Command,请求到本地jar包main方法中,请求参数为本地图片路径

2、jar包拿到本地图片路径,请求服务器上传文件接口

3、服务器存储,并且返回url映射地址

话不多说,直接撸代码~~~

一、本地jar包

1、idea创建SpringBoot空项目,可以不勾选任何依赖

在这里插入图片描述

2、pom.xml配置,导入hutool包。(直接使用我的)
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
3、创建类TyporaUploadFile,mian方法使用hutool上传到服务器接口
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;

import java.util.Arrays;
import java.util.HashMap;

/**
 * @author Chen Shaohua
 * @date 2023/1/17 15:44
 */
public class TyporaUploadFile {
    public static void main(String[] args) {
        System.out.println("本地文件:" + Arrays.toString(args));
        if (args.length == 0) return;
        for (String filePath : args) {
            HashMap<String, Object> paramMap = new HashMap<>();
            paramMap.put("file", FileUtil.file(filePath));
            String post = HttpUtil.post("Http://服务器地址:8090/file/saveFile", paramMap);
            System.out.println(post);
        }
    }
}
4、编译jar包配置

右上角File -> Project Structure

image-20230117184435403


Artifacts - > 右边+号 -> 选择第二个

在这里插入图片描述


编译设置,选择后点ok

在这里插入图片描述


设置完成如下

在这里插入图片描述

5、编译

最上方菜单栏点击,build -> build Artifacts -> 如图下 -> build

image-20230117185427395

6、编辑后jar包,放到自己常用位置

image-20230117185503328

二、服务器上传文件接口

1、config配置与本地文件映射

地址为需要和本地那个文件夹配置映射,不懂百度有详解

注:必须以/结尾,否则上传文件完成后,url访问不到,404

image-20230117185825760

package com.example.aliyuntest.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    //跨域配置,前端和后端端口不一样
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //8080前端使用的端口号
        registry.addMapping("/**");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**").addResourceLocations("file:/myData/testPro/fileTemp/");
    }
}
2、Controller编写上传接口
package com.example.aliyuntest.controller;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;

/**
 * @author Chen Shaohua
 * @date 2022/11/15 16:53
 */
@RestController
@RequestMapping("/file")
@CrossOrigin
@Slf4j
public class FileController {

    @RequestMapping(value = "/saveFile")
    public String paddleOcr(MultipartFile file,  HttpServletRequest request) {
        if (file ==null || file.isEmpty()) {
            return "文件为空!";
        }
        String url = "http://服务器地址:" + request.getLocalPort() + "/file/";
        try {
            String name = file.getOriginalFilename();
            //获取主文件名 文件后缀
            String suffix = FileUtil.getSuffix(name);
            //文件名称为日期时间简写,如:20230117190235  年月日时分秒
            String fileName = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_PATTERN) + "." + suffix;
            //一般情况为 年 月 项目名
            String fileNamePath = DateUtil.format(DateUtil.date(), "yyyy/MM/")+ fileName;
            //创建父文件夹,不存在创建
            FileUtil.mkdir(filePath + fileNamePath);
            //创建文件
            File newFile = new File(filePath + fileNamePath);
            //写入文件
            file.transferTo(newFile);
            //返回url地址
            return url + fileNamePath;
        } catch (Exception e) {
            log.info("保存文件异常!", e);
            return "保存文件异常!" + e.getMessage();
        }
    }
}
3、application.yml配置
server:
  port: 8090

spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 10240MB   #最大文件size
      max-request-size: 10240MB #每次请求最大size
      
logging:
  file:
    name: ./log/logs.log
4、完整项目

image-20230117191519076

三、Typora配置

打开左上角设置 -> 偏好设置,如图下

命令行代码执行本地jar包的main方法,本地必须配置环境变量(百度一大堆)

java -jar jar包放置位置 ...文件路径(可配多个)

image-20230117183350017


点击验证图片上传选项测试

image-20230117191014242


编写时上传

截屏 -> 粘贴图片 -> 右击图片点击上传

四、完整项目已上传到gitee中,欢迎大家使用

配置文件映射路径已做动态配置

完整代码地址gitee

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值