日常使用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
Artifacts - > 右边+号 -> 选择第二个
编译设置,选择后点ok
设置完成如下
5、编译
最上方菜单栏点击,build -> build Artifacts -> 如图下 -> build
6、编辑后jar包,放到自己常用位置
二、服务器上传文件接口
1、config配置与本地文件映射
地址为需要和本地那个文件夹配置映射,不懂百度有详解
注:必须以/结尾,否则上传文件完成后,url访问不到,404
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、完整项目
三、Typora配置
打开左上角设置 -> 偏好设置,如图下
命令行代码执行本地jar包的main方法,本地必须配置环境变量(百度一大堆)
java -jar jar包放置位置 ...文件路径(可配多个)
点击验证图片上传选项测试
编写时上传
截屏 -> 粘贴图片 -> 右击图片点击上传
四、完整项目已上传到gitee中,欢迎大家使用
配置文件映射路径已做动态配置