最近把我的服务器从CentOS7升级到了Ubuntu24.04,并把我的博客由蚂蚁笔记换成了Halo,正好Halo有图床插件集成了Lsky Pro,于是顺带并且部署了一个开源版本的Lsky Pro管理图床。在使用过程中正好发现这个开源的Lsky Pro有个接口有点小问题。
问题描述
集成插件中有功能可以指定一个相册的id把图片上传到这个相册中去,使用开源版本的Lsky Pro时这个功能无法生效,会直接上传到图库中。
排查解决过程
- 前端链路验证
F12在network找到UploadImage请求查看负载参数,可以看到请求参数没问题
// 请求体结构验证
interface UploadParams {
file: File;
album_id: number; // 相册ID数值型参数 可选
strategy: 'local' | 'remote';
}
- 后端服务追踪
在插件作者Service Impl实现类中找到LskyImpl中的UploadImage方法,断点测试参数无异常
@Override
public Mono<ResultsVO> uploadImage(CommonQuery query, MultiValueMap<String, ?> multipartData) {
Map<String, Object> paramMap = new HashMap(1);
paramMap.put("file", multipartData);
paramMap.put("album_id", query.getAlbumId());
return req(query.getPictureBedId(), "upload", paramMap)
.map(response -> {
if (response.status) {
return ResultsVO.success(response.message, response.data);
}
return ResultsVO.failure(response.message);
});
}
- Lsky Pro开源源码
从API Controller中找到Upload接口,顺着代码逻辑找到app/Services/ImageService.php
中具体实现的方法,发现这个实现完全没有处理相册ID的内容,只有上传到默认相册的逻辑。这边我给他补上了,内容很简单。
/**
* @param Request $request
* @return Image
* @throws UploadException
*/
public function store(Request $request): Image
{
// 其他代码...
// 默认储存策略
if (! is_null($user)) {
if (Utils::config(ConfigKey::IsUserNeedVerify) && ! $user->email_verified_at) {
throw new UploadException('账户未验证');
}
if ($user->status !== UserStatus::Normal) {
throw new UploadException('账号状态异常');
}
if ($file->getSize() / 1024 + $user->images()->sum('size') > $user->capacity) {
throw new UploadException('储存空间不足');
}
# 2025-02-23 API接口传入相册后无法将图片上传到对应相册
# ------------------------修改前代码----------------------------
// // 图片保存至默认相册(若有)
// if ($albumId = $user->configs->get(UserConfigKey::DefaultAlbum)) {
// if ($user->albums()->where('id', $albumId)->exists()) {
// $image->album_id = $albumId;
// }
// }
#-------------------------修改后代码-----------------------------
if ($request->has('album_id')) {
// 获取 album_id 参数
$albumId = $request->input('album_id');
if ($user->albums()->where('id', $albumId)->exists()) {
$image->album_id = $albumId; // 设置 album_id
}
}
// 图片保存至默认相册(若有)
else if (($albumId = $user->configs->get(UserConfigKey::DefaultAlbum))) {
// 判断是否有默认相册 ID
if ($user->albums()->where('id', $albumId)->exists()) {
$image->album_id = $albumId; // 设置默认相册的 album_id
}
}
#------------------------------end----------------------------------
$image->user_id = $user->id;
// 用户设置的图片默认权限
$image->permission = $user->configs->get(UserConfigKey::DefaultPermission, ImagePermission::Private);
}
// 上传频率限制
$this->rateLimiter($configs, $request);
// 其他代码...
return $image;
}
评论区