最近买了一台轻量服务器,带宽和内存都还可以,闲来无事,想着自建图床玩玩。
服务器使用1panel管理,在1panel应用商店了找到了图床应用Lsky-Pro。于是,决定使用该软件
一. Lsky-Pro
安装没啥好说的了,直接1panel一键安装。然后OpenResty反向代理出去。
上Lsky-pro的管理后台,一顿设置,最终如图所示
二. 使用
虽然图床有了,但每次都打开网页手动上传着实有点不方便。能不能使用快捷键全自动化上传呢?
当然可以。Lsky-Pro提供了一系列api,我们可以使用这些api,配合Dropzone 这个神器,实现自动化上传。
接口调用
获取token
调用upload上传方法
获取token很简单,并且只需要获取一次就行。
Dropzone使用
Dropzone 是mac上一个效率应用,快速复制移动文件,打开应用程序以及使用许多不同云服务共享文件。并且最大的优点是可以自定义实现脚本逻辑。
我们这里使用python脚本来实现上传逻辑。
新建action
编写脚本
# Dropzone Action Info
# Name: upload_pic
# Description: Describes what your action will do.
# Handles: Files
# Creator: mahaonan
# URL: https://yoursite.com
# Events: Clicked, Dragged
# KeyModifiers: Command, Option, Control, Shift
# SkipConfig: No
# RunsSandboxed: Yes
# Version: 1.0
# MinDropzoneVersion: 4.0
# PythonPath: /usr/local/bin/python3
import requests
import pasteboard
from PIL import ImageGrab
from PIL import Image
import mimetypes
url = "https://xxxx/api/v1/upload"
auth = "Bearer xxxx"
def upload_image(file_path):
payload = {}
# 提取文件名
file_name = file_path.split('/')[-1]
# 查找
mime_type, _ = mimetypes.guess_type(file_path)
if mime_type is None:
mime_type = 'application/octet-stream' # 默认MIME类型
files = [
('file', (file_name, open(file_path, 'rb'), mime_type))
]
headers = {
'Authorization': auth,
}
response = requests.request(
"POST", url, headers=headers, data=payload, files=files)
print(response.text)
try:
response.raise_for_status() # Raises an HTTPError for bad responses
return response.json()
except requests.exceptions.RequestException as e:
return {"status": False, "message": str(e), "data": None}
def get_image_url(response):
print(response)
if response['status']:
return response['data']['links']['url']
else:
return None
def dragged():
if len(items) != 1:
return
final_url = get_image_url(upload_image(items[0]))
dz.finish("上传到lsky-pro成功")
dz.text(final_url)
def get_clipboard_file_path():
# 创建一个剪切板对象
pb = pasteboard.Pasteboard()
print(pb.get_contents)
# 获取剪切板中的数据
items = pb.get_file_urls()
if items:
return items[0]
else:
# 如果剪贴板中没有文件,尝试获取图片
img = ImageGrab.grabclipboard()
if isinstance(img, Image.Image):
# 如果剪贴板中有图片,将图片保存为文件
file_path = "/tmp/clipboard_image.png"
img.save(file_path)
return file_path
# 如果剪切板中没有文件,返回None
return None
def clicked():
try:
file_path = get_clipboard_file_path()
if file_path:
final_url = get_image_url(upload_image(file_path))
dz.finish("上传到lsky-pro成功")
dz.text(final_url)
else:
dz.finish("剪切板中没有文件")
except Exception as e:
dz.error("处理剪切板内容时出现错误: " + str(e))
需要替换url和auth参数。
设置快捷键
这里也需要设置Dropzone的快捷键,我设置为ctrl+q
最终效果
复制图片,截图以后。按快捷键ctrl + q + q,就能直接把图片上传到图床上。如下所示