圖床
圖床可以把圖片轉為鏈接,從而方便我們書寫、分享博客,目前圖床主要分為以下幾類:
- 利用
Git
倉庫存儲 - 對象存儲(OSS、COS、七牛云等)
- 免費公共圖床(SM.MS、聚合圖床、ImgTP、Postimage等)
但上述圖床都有些不盡人意
- 公共圖床的穩定性未知,往往會開啟審查機制、限制上傳圖片的尺寸
Github
國內訪問速度堪憂,并且官方明令禁止將Github
和Gitee
倉庫作為圖床- 對象存儲的容量和訪問速度還不錯,但流量較貴
圖床服務并不需要高性能的服務器去承載,現在云服務器的價格也并不昂貴,因此搭建個人圖床也許是不錯的選擇。github上的一個開源項目North
可以很方便的幫助我們自部署圖床服務.
開源地址:
North:一個易于搭建的圖床服務
Feature
- 剪貼板圖片上傳、鏈接自動復制
- 可視化圖片管理
- 安全可靠,圖片完全存儲在主機
- 無圖片尺寸、數量、帶寬限制(取決于環境)
- 跨平臺,可在
windows
、Linux
、MacOS
部署
安裝
Requirement
- .NET Runtime (必需)
- 在 Windows 上安裝
- 在 Linux 上安裝 .NET
- 在 macOS 上安裝 .NET
- Nginx (可選)
本地搭建
版本: Windows 11 家庭中文版 (21H2)
-
前往 ImageBed主頁 下載資源包
-
解壓資源包 (圖片存儲路徑為
Data/Resources/Images
) -
雙擊
ImageBed.exe
運行服務 -
瀏覽器地址欄輸入
localhost:12121
-
點擊上傳圖片
-
安裝完成
服務器搭建
版本: Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-159-generic x86_64)
-
將資源包解壓后上傳至云服務器
-
進入
ImageBed
文件夾,運行ImageBed.dll
nohup dotnet ImageBed.dll &
該命令會在后臺運行
ImageBed.dll
,若要關閉ImageBed
服務,需要先查詢ImageBed
服務的pid
,之后用kill
命令關閉# 查詢ImageBed服務pid ps -ef | grep dotnet# pid為4363 ubuntu 4363 1636 0 19:32 pts/0 00:00:01 dotnet ImageBed.dll ubuntu 31389 30239 0 21:47 pts/2 00:00:00 grep --color=auto dotnet# 關閉ImageBed服務 ubuntu@VM-0-16-ubuntu:~$ sudo kill 4363
-
瀏覽器地址欄輸入
{ip}:12121
即可訪問圖床服務,其中{ip}
為云服務器公網ip
-
安裝完成
Nginx 反向代理
反向代理概念、原理、功能請 移步,這里不再贅述。下面主要敘述如何在 Linux
上搭建 Nginx
反相代理
-
安裝
nginx
sudo apt-get install nginx
-
打開
/etc/nginx/nginx.conf
,修改相關設置user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 20480;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;map $http_connection $connection_upgrade {"~*Upgrade" $http_connection;default keep-alive;}# ========================== 重點看這里========================server {listen 80;server_name xxx.xxx.xxx.xxx; # 云服務器公網ip (或域名) location / {client_max_body_size 100m; # html報文尺寸限制proxy_pass http://127.0.0.1:12121;# Configuration for WebSocketsproxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;proxy_cache off;# WebSockets were implemented after http/1.0proxy_http_version 1.1;# Configuration for ServerSentEventsproxy_buffering off;# Configuration for LongPolling or if your KeepAliveInterval is longer than 60 secondsproxy_read_timeout 100s;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*; }
-
檢查
nginx.conf
語法是否正確sudo nginx -t
若格式正確則輸出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
-
關閉防火墻并重新加載
nginx
sudo systemctl stop firewalld sudo systemctl start girewalld sudo firewall-cmd --reload sudo nginx -s reload
用法
上傳
web 界面上傳
剪貼板上傳
刪除
導入導出
導入圖片
導出圖片
視圖切換
API
該圖床服務器包含三個API(上傳、下載、刪除),控制器為 Controllers/ImageController
上傳圖片
HTTP
POST
/api/image
Body 請求參數
Form-data
參數名 | 類型 | 必填 | 說明 |
---|---|---|---|
* | [file] | 是 | 圖片文件 |
返回參數
JSON
最外層結構為: Object
參數名 | 類型 | 必含 | 說明 |
---|---|---|---|
statusCode | [int] | 是 | 狀態碼 |
message | [string] | 是 | 提示信息 |
res | [array] | 是 | 圖片鏈接 |
下載圖片
HTTP
GET
/api/image/{imageName}
REST參數
參數名 | 類型 | 必填 | 說明 |
---|---|---|---|
imageName | [string] | 是 | 圖片名稱 |
返回參數
Binary
圖片文件 |
---|
刪除圖片
HTTP
DELETE
/api/image/{imageName}
REST參數
參數名 | 類型 | 必填 | 說明 |
---|---|---|---|
imageName | [string] | 是 | 圖片名稱 |
返回參數
JSON
最外層結構為: Object
參數名 | 類型 | 必含 | 說明 |
---|---|---|---|
statusCode | [int] | 是 | 狀態碼 |
message | [string] | 是 | 提示信息 |
res | [object] | 是 | 恒為null |
Q & A
S1. 局域網用戶如何上傳圖片?
局域網內用戶在瀏覽器輸入 {ip}:12121
即可訪問圖床服務器,其中 {ip}
為服務器的 局域網IP
S2. 如何對接Picgo?
PicGo 是一款圖床管理軟件,支持多種圖床。使用 picgo
可大大簡化我們上傳圖片的流程,筆者在此開發了 picgo
插件 picgo-plugin-imagebed 以供大家使用
S3. 導入圖片壓縮包無響應?
請嘗試直接壓縮圖片,而不是包含圖片的文件夾
S4. 通知設置中的郵箱授權碼如何獲取?
請移步 這里