OSS批量导出图片永久链接

OSS批量导出图片永久链接

使用OSS(Object Storage Service,对象存储服务)作为网站的图片图床意味着将网站的图片存储在OSS服务中,而不是直接存储在网站的服务器上。这样做的好处包括:

  1. 节省服务器空间:网站服务器可以释放出存储图片的空间,用于存放更多的网页内容或其他数据。
  2. 提高访问速度:专门的图片服务器或OSS服务通常具有更好的负载均衡和CDN(内容分发网络)支持,可以更快地向用户传输图片。
  3. 降低成本:对于图片存储和流量使用,OSS等服务通常比传统服务器更加经济,尤其是当有大量图片需要存储和传输时。
  4. 易于管理:OSS服务通常提供图形界面和API接口,方便用户管理和操作图片资源。
  5. 安全性:OSS服务提供数据备份和加密功能,增强了数据的安全性。
  6. 可扩展性:随着网站流量的增加,OSS可以方便地扩展存储容量和处理更多的并发请求,而不需要对网站服务器进行升级。
  7. 图片处理功能:一些OSS服务支持对图片进行处理,如压缩、格式转换和添加水印等,这样可以在不牺牲图片质量的前提下减少图片文件的大小,节省流量。
  8. 流量优化:通过使用OSS的流量包或共享流量出口,可以进一步降低流量成本。
  9. 跨平台兼容性:使用OSS作为图床,图片链接可以在不同的平台和设备上通用,提高了图片的可用性。

需求

很多时候,我需要批量上传图片,然后分别获取到图片的URL,但是像腾讯云OSS阿里云OSS虽然提供了批量导出文件信息选项,但为了安全起见,都设置了过期时间。然而这并不是我想要的,难道我的站点过一段时间就要换一边图片URL,这虽然能通过官方提供的SDK实现,但不符合我快速建站的目的。

image-20240425094848613

PicGo高级技巧

经常写博客的人应该熟悉PicGo,它是一个用于快速上传图片并获取图片 URL 链接的工具。相关下载及教程详见PicGo

本教程主要使用的是PicGo-Server,PicGo在2.2.0版本开始内置了一个小型的服务器,用于接收来自其他应用的HTTP请求来上传图片。默认监听地址: 127.0.0.1,默认监听端口:36677

我们就是利用PicGo-Server将图片上传到OSS,并获取PicGo-Server返回来的地址。

HTTP调用上传具体路径图片

  • method: POST
  • url: http://127.0.0.1:36677/upload (此处以默认配置为例)
  • request body: {list: ['xxx.jpg']} 必须是JSON格式
image-20240425095640995
1
2
3
4
{
"success": true, // or false
"result": ["url"]
}

使用C#实现批量上传图片并获取URL

在配置好PicGo的图床信息后,开启PicGo,利用C#结合PicGo-Server来实现图片的上传及获取路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class R
{
public bool success { get; set; }
public List<string> result { get; set; }
}

static HttpClient client = new HttpClient();
static Uri uri = new Uri(@"http://127.0.0.1:36677/upload");
static async Task<string?> UplaodAsync(string path)
{
var requestData = new { list = new List<string>() { path } };
string jsonRequest = JsonConvert.SerializeObject(requestData);
HttpContent content = new StringContent(jsonRequest, Encoding.UTF8, "application/json");

try
{
// 发送 POST 请求
HttpResponseMessage response = await client.PostAsync(uri, content);
// 确保请求成功响应
response.EnsureSuccessStatusCode();
// 读取返回的 JSON 内容
var jsonResponse = await response.Content.ReadAsStringAsync();

var responseData = JsonConvert.DeserializeObject<R>(jsonResponse);
return responseData.result.FirstOrDefault();
}
catch (Exception e)
{
throw e;
}
}
作者

步步为营

发布于

2024-04-25

更新于

2025-03-15

许可协议