文章目录

  • 前言
  • 1、Java具体实现
  • 2、使用uPic图床工具自定义搭建图床


前言

之前使用的图床工具一直都是gitee,奈何现在加了防盗链,很多图片文件无法访问,导致很多笔记图片博客等都无法访问,鉴于此,我搭建过七牛云图床(免费10G),阿里云oss。七牛云需要开通域名https(放弃了,有域名的还是可以去用七牛云),后来就去开通了阿里云OSS对象存储,需要存储空间收费,差不多9块钱40G一年,就买了5年的,但是奈何它还要单独的收取访问的流量费用。折腾来折腾去,为何不自己搭建弄一个图床,为何不用自己的服务器呢?

前提:需要租一台服务器

1、Java具体实现

@RequestMapping("uploadImg")
public JSONObject uploadImg(HttpServletRequest request,
                            @RequestPart("file") MultipartFile file,
                            @RequestParam("format") String format,
                            @RequestParam("imgPath") String imgPath,
                            @RequestParam("ipAddress") String ipAddress) {
    JSONObject jsonObject = new JSONObject();
    try {
        String ip = getIpAddress(request);
        // 请求值不能为空才能上传
        if (Objects.nonNull(file) && StringUtils.isNoneBlank(imgPath) && StringUtils.isNoneBlank(format) && StringUtils.isNoneBlank(ipAddress)) {
            String fileName = imgPath + format;
            File uploadFile = new File(fileName);

            // 保存文件,使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
            file.transferTo(uploadFile);
            jsonObject.put("path", ipAddress + format);

            log.info("来自ip:{} 的请求,文件访问路径:{}", ip, ipAddress + fileName);
        }
    } catch (Exception e) {
        log.error("uploadImg is error:", e);
    }
    return jsonObject;
}

项目是使用的SpringBoot项目,代码其实没多少,项目也已经开源,Git链接:https://gitee.com/yuankaiqiang0/file

打包后发布运行到自己的服务器上,访问时,使用

springboot 图片存储服务 springboot图片服务器搭建_图床搭建

2、使用uPic图床工具自定义搭建图床

项目运行以后使用uPic工具进行自定义配置

springboot 图片存储服务 springboot图片服务器搭建_springboot 图片存储服务_02

  • API地址:SpringBoot项目中的接口路径,如果要部署到服务器上,则填写服务器上的ip地址即可,有域名的填写上服务器对应的域名。
  • 请求方式:POST或者PUT。
  • 文件字段名代码MultipartFile属性使用的@RequestPart(“file”)中使用的名称,必须使用@RequestPart,为啥,因为我试过使用其它的注解例如@RequestParam不行。

springboot 图片存储服务 springboot图片服务器搭建_图床搭建_03

  • URL路径:接口返回的JSON类型数据中返回的字段
#接口返回数据类型
{
	"data": http://127.0.0.1:9999/img/123.jpg
}
#接收时使用["data"]方式进行接收
  • 点击其它字段
  • Header:需要增加content-type为multipart/form-data,对应接口中使用的@RequestPart
  • Body:这三个字段对应的都是接口中必须要传递的属性,其中的imgPath和ipAddress可以根据自己的需要进行更改。我这里的imgPath使用的路径也就是我服务器中数据存储对应的路径,可以更改为自己存储路径。ipAddress为访问图片时需要访问的路径信息,具体实现是在代码中进行了拼接,也就是ipAddress+format的路径。你可能会好奇我这里为什么ip地址后面有img,其实img是我/home/file/文件路径下面的一个文件夹,这些都可以根据自己的需要进行自定义的更改。
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("file:/home/file/");
    }

}