利用水墨映客图床作为COS服务器

这篇具有很好参考价值的文章主要介绍了利用水墨映客图床作为COS服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 利用水墨映客作为COS服务器
    • 利用picGo配合typora上传图片
      • 安装PicGo(以Windows为例)
      • 安装lankong插件
    • 在SpringBoot中开发图片上传工具类
      • 设置图片上传请求的参数
      • 设置图片的参数
      • 读取图片内容并写入请求
      • 获取响应

利用水墨映客作为COS服务器

文章类网站项目的图片存储都是一个很重要的问题,一般都是使用云服务厂商的COS对象存储服务(参考前文:使用腾讯云对象存储搭建图床) ,虽然小网站的需求不大,购买也不贵,但是还是想能不能找个免费的,毕竟能省就省嘛。

平常有些博客或者笔记的都是用markdown编辑,图片一般都是上传图床,但是很多图床都没有开放接口。最近用路过图床的时候网站没打开,咨询管理说有DNS污染,便又搜索有没有好用一些的图床,就发现了水墨映客图床,虽然容量有限,但是他每天签到都可以扩充容量,并且最最重要的我发现水墨映客开放上传接口,于是就开始鼓捣想着利用水墨映客作为COS服务器。

水墨图床地址:图片映客--水墨图床,免费专业的高速外链图床

利用水墨映客图床作为COS服务器

利用水墨映客图床作为COS服务器

分为两种,一种还是利用picGo配合typora,另一种是在SpringBoot中开发为工具类专门用作图片上传。

利用picGo配合typora上传图片

安装PicGo(以Windows为例)

先下载PicGo的客户端安装包,找到对应的平台安装包然后下载。

下载链接:

  • GitHub:https://github.com/Molunerfinn/PicGo/releases (访问较慢)
  • 山东大学镜像网站:https://mirrors.sdu.edu.cn/github-release/Molunerfinn_PicGo/ (速度较快)

(我的电脑:Windows11,64位,故下载PicGo-Setup-2.3.1-x64.exe)

利用水墨映客图床作为COS服务器

下载之后正常安装就可以了。

利用水墨映客图床作为COS服务器

安装lankong插件

这是一个为 兰空图床适配开发的 PicGo 图片上传插件。同样适用于水墨映客图床

在picGo的插件设置中搜索lankong,然后安装。

利用水墨映客图床作为COS服务器

安装后配置

利用水墨映客图床作为COS服务器

利用水墨映客图床作为COS服务器

  • Lsky Pro Version 在下拉菜单中选择 Lsky Pro 版本,V1 还是 V2,默认 V1

  • 填写图床的 server url,注意不要以 / 结束

    • https://image.example.com ✅️
    • https://image.example.com/ ❌️
  • 填写 Auth Token 使用 Bearer 拼接,token在水墨映客的设置中获取,注意在配置时候需要前面拼接Bearer

    利用水墨映客图床作为COS服务器

  • Strategy ID,存储策略 ID,如果是 V1 或 V2 使用默认存储策略的用户,请留空;除非你知道具体 ID,否则请留空

  • Album ID,相册 ID,只针对 V2 有效

  • Permission,图片权限,公开还是私有,默认是私有

  • Sync Delete 同步删除选项,只支持 V2,开启后在 PicGo 相册中删除图片可同步删除图床上的文件,默认关闭

  • Ignore certificate error 开关,默认关闭,请保持关闭,除非你遇到 certificate has expired 等证书报错才需要考虑将其开启。由于有些站点使用 Let's Encrypt 颁发的免费证书,有效期只有 90 天,在测试上传中遇到了 certificate has expired 错误,打开开关 Ignore certificate error 即可成功上传

配置完毕保存即可,然后再typora里配置图片上传服务即可。

利用水墨映客图床作为COS服务器

在SpringBoot中开发图片上传工具类

该工具类的方法有两个参数一个是文件名(fileName),另一个是文件的输入流。

在Spring Boot中一般使用MultipartFile类来处理文件相关,在此处可以通过getInputStream()方法获取文件的输入流

主要的步骤分为:

  • 设置图片上传请求的参数
  • 设置图片的参数
  • 读取图片内容并写入请求
  • 获取响应

水墨映客图床的上传接口为https://img.ink/api/upload,如果上传成功状态码返回200,失败返回500

上传成功的返回格式:

{
    "code":200,
    "msg":"success",
    "data":		  
        {
            "id":"281381",
            "name":".jpg",
            "url":"https:\/\/pic2.ziyuan.wang\/user\/userNickName\/2024\/04\/fileName_d75b474147589.jpg",               "size":101168,
            "mime":"image\/jpeg",
            "sha1":"9adb76331eb1254567547afea3e516ac1901eac1",
            "md5":"aef7bc728fd44e77d5688529c8122882",
            "quota":"6485442560.00",
            "use_quota":"6666141.00"
        },
    "time":1714282312
}

设置图片上传请求的参数

 // 设置上传地址
URL url = new URL("https://img.ink/api/upload");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 // 设置请求方法为POST
connection.setRequestMethod("POST");
connection.setDoOutput(true);
// 设置请求头
connection.setRequestProperty("token", "你的请求头"); // 替换为你的token,在设置中获取
// 构建请求参数
String boundary = Long.toHexString(System.currentTimeMillis());//用来标识multipart/form-data内容类型的边界字符串,使用时间戳,确保每次请求的边界字符串都是唯一的,以避免冲突
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);//设置上传文件的格式
OutputStream output = connection.getOutputStream();//获取与HTTP连接关联的输出流
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true);//向输出流写入文本形式的数据

设置图片的参数

writer.append("--" + boundary).append("\r\n");//添加了一个分隔边界标记
writer.append("Content-Disposition: form-data; name=\"image\"; filename=\"" + fileName + "\"").append("\r\n");//设置Content-Disposition头部信息,
writer.append("Content-Type: image/jpeg").append("\r\n");//声明上传文件的MIME类型为image/jpeg
writer.append("\r\n");//回车换行符作为分隔
writer.flush();

读取图片内容并写入请求

//接受传入的输入流
InputStream input = inputStream;
byte[] buffer = new byte[4096];//临时存储从输入流中读取的数据
int bytesRead;
//持续读取输入流中的数据直到没有数据
while ((bytesRead = input.read(buffer)) != -1) {
    output.write(buffer, 0, bytesRead);
}
output.flush();
input.close();
// 结束整个multipart/form-data请求体
writer.append("\r\n").append("--" + boundary + "--").append("\r\n");
writer.close();

获取响应

//获取服务器对上传请求的响应状态码,200代表上传成功
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    StringBuffer response = new StringBuffer();
    //逐行读取服务器返回的文本数据
    while ((line = reader.readLine()) != null) {
        response.append(line);
    }
    reader.close();
    ObjectMapper mapper = new ObjectMapper();
    //使用Jackson库的ObjectMapper来解析response中的JSON字符串为JsonNode对象
    JsonNode rootNode = mapper.readTree(String.valueOf(response));
    //从解析出的JSON对象中,通过路径rootNode.path("data")定位到"data"节点,再从该节点下获取"url"字段的值,即图片上传后的URL
    JsonNode userNode = rootNode.path("data");
    String imgUrl = userNode.path("url").asText();
    return imgUrl;
} else {
    return "error";
}

调用该方法时的使用(file为MultipartFile对象):

String originalFilename = file.getOriginalFilename();//获取完整文件名
String fileName = originalFilename.substring(originalFilename.lastIndexOf("."));//获取文件名后缀
String url = InkImageUtil.uploadImg(fileName,file.getInputStream());//调用方法上传图片

测试:

利用水墨映客图床作为COS服务器

利用水墨映客图床作为COS服务器

源码:

public class InkImageUtil {
    public static String uploadImg(String fileName,InputStream inputStream) throws IOException {
            // 设置上传地址
            URL url = new URL("https://img.ink/api/upload");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            // 设置请求方法为POST
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            // 设置请求头
            connection.setRequestProperty("token", "f3ee57bcc8d796ea9b72bd776f243d98"); // 替换为你的token
            // 构建请求参数
            String boundary = Long.toHexString(System.currentTimeMillis());
            connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
            OutputStream output = connection.getOutputStream();
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true);
            // 添加图片参数
            writer.append("--" + boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"image\"; filename=\"" + fileName + "\"").append("\r\n");
            writer.append("Content-Type: image/jpeg").append("\r\n");
            writer.append("\r\n");
            writer.flush();
            // 读取图片内容并写入请求
            InputStream input = inputStream;
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = input.read(buffer)) != -1) {
                output.write(buffer, 0, bytesRead);
            }
            output.flush();
            input.close();
            // 结束请求
            writer.append("\r\n").append("--" + boundary + "--").append("\r\n");
            writer.close();
            // 获取响应
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                StringBuffer response = new StringBuffer();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                System.out.println(response.toString());
                ObjectMapper mapper = new ObjectMapper();
                JsonNode rootNode = mapper.readTree(String.valueOf(response));
                JsonNode userNode = rootNode.path("data");
                String imgUrl = userNode.path("url").asText();
                return imgUrl;
            } else {
                return "error";
            }
    }
}
@PostMapping("/upload")
    public Result<String> fileUpload(MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();
        String fileName = originalFilename.substring(originalFilename.lastIndexOf("."));
        String url = InkImageUtil.uploadImg(fileName,file.getInputStream());
        return Result.success(url);
    }

欢迎关注公众号:愚生浅末

利用水墨映客图床作为COS服务器文章来源地址https://www.toymoban.com/news/detail-861073.html

到了这里,关于利用水墨映客图床作为COS服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【nodejs 作为服务器修改最大堆内存】

    查看node应用列表 结果: id name mode ↺ status cpu memory 1 app fork 211 stopped 0% 0b 2 my-app fork 0 online 0% 0b 找到你先查看的项目 ,找到 script args ,这个就是最大值 在使用PM2管理Node.js进程时, 默认情况下,PM2不会限制Node.js进程的最大堆内存值 。这意味着,Node.js进程可以使用系统中可用

    2024年02月14日
    浏览(33)
  • 把自己的电脑作为网络代理服务器

    背景:我手里有两台电脑,一个笔记本(可科学上网),一个台式机, 我想让这个笔记本成为台式机上网的代理服务器,这样我在使用台式机的时候也可以科学上网了。 设置完成后,台式机连上这个网络就ok了。

    2024年02月13日
    浏览(58)
  • OPENWRT 使用nginx作为web服务器

    在op上大家使用nginx作为web服务器,主要是为了其强大的反向代理功能,但op上的nginx官方做了一定的修改,配置上稍显复杂,几篇文章也是比较老的,配置也是一头雾水,作业都不好抄,索性自己查了资料学了些nginx的内容,实现了如下的功能: ####默认你已经完成 域名申请,

    2024年02月04日
    浏览(36)
  • nginx 作为vue项目服务器简单配置

    一个简单配置就玩了。 我这个项目有个特殊的地方,一个项目用了两个后台,请求的地址就不一样,我是根据前端请求uri区别使用那个后端的。比如浏览器http://localhost/system/user/list就使用 localhost:8080后台,如果是http://localhost/business/xxxx就使用localhost:8081后台,nginx配置如下:

    2024年02月13日
    浏览(38)
  • 使用可上网的服务器作为网关,实现另一台服务器上网

    本文的目标是利用一台可以上网的服务器作为网关,使在同一局域网中的所有服务器都可以上网。 假设有若干台服务器:A,B,C,D… 其中服务器 A 可以上网 。 现在的需求是——我想让B,C,D也可以上网,具体来说有两种网线连接的方法。 如果不使用交换机,需要用网线将

    2024年02月08日
    浏览(49)
  • 配置Nginx作为静态资源服务器及安全策略

    上一篇文章写了Nginx负载均衡实现方案详解,有同学私信我说能不能写一篇关于nginx代理静态资源的文章。当然没问题,这篇文章就分享一下如何配置Nginx作为静态资源服务器同时也分享一些常用的安全策略配置。 静态资源指的是在服务器端存储的不会变化的文件,这些文件的

    2024年02月21日
    浏览(47)
  • ESP32作为服务器,使用网页控制LED小灯

    项目描述 ESP32-S开发板加入局域网,使用platformIO编写好ESP32的代码后,编译下载到ESP32中,访问ESP32的IP地址,使用网页控制连接着的LED小灯 项目准备: ESP32-S开发板 一根数据线 电脑 LED小灯 开发环境:vscode + PlatformIO 原理剖析 这个ESP32作为服务器,浏览器作为客户端,这是一个简

    2023年04月26日
    浏览(51)
  • 【在 Ubuntu 上配置 Nginx 作为 Web 服务器】

    在 Ubuntu 上配置 Nginx 作为 Web 服务器非常常见,以下是在 Ubuntu 上配置 Nginx 的基本步骤: 安装 Nginx : 打开终端,运行以下命令来安装 Nginx: 启动 Nginx : 安装完成后,Nginx 会自动启动。你可以使用以下命令来检查 Nginx 服务状态: 配置 Nginx : Nginx 的配置文件位于 /etc/nginx/

    2024年04月23日
    浏览(37)
  • 具有公网IP的服务器作为代理服务器,并使用Nginx将内网服务器反向代理

    在代理服务器上安装Nginx。如果您正在使用Linux操作系统,则可以使用包管理器来安装Nginx。例如,如果您使用的是Ubuntu,可以使用以下命令安装: 配置Nginx以将HTTP和HTTPS请求转发到内部服务器。打开Nginx的主配置文件/etc/nginx/nginx.conf,并在http块中添加以下代码: 注意: 将

    2024年01月25日
    浏览(48)
  • 【开发日记】换掉Nginx,使用HAProxy作为反向代理服务器

    HAProxy,全称为 \\\"High Availability Proxy\\\",是一款开源的、高性能的负载均衡器和代理服务器。主要用于改善应用程序的可用性、可靠性和性能。 与大众熟知的Nginx相比各有优缺点,如果你需要的是一个Web服务器,还是首选Nginx,虽然HAProxy也能实现相同效果,但却需要通过十分繁琐

    2024年01月25日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包