alist
alist copied to clipboard
fix(misskey): folderId format validation and root directory handling
Description / 描述
主要更改:
-
修复panic问题
- 在
put方法中添加了空值检查,避免对nil调用GetID()
- 在
-
修复Misskey API的folderId格式问题
- 将
handleFolderId返回类型从string改为interface{} - 根目录返回
nil而不是空字符串,避免触发misskey:id格式验证错误 - 在
put方法中正确处理form data,只有非根目录才添加folderId字段
- 将
-
添加根目录检查逻辑
- 新增
isRootFolder函数统一判断是否为根目录 - 在所有相关方法中统一使用
isRootFolder函数:getFiles和getFolders:根目录不传folderIdhandleFolderId:根目录返回nilput:根目录不添加folderId到formData
- 新增
-
代码优化
- 统一了根目录判断逻辑,提高代码可维护性
- 修复了类型转换问题,确保编译通过
- 使用
http.MethodPost代替手动编码的POST
Motivation and Context / 背景
为什么需要此更改?它解决了什么问题?
-
Panic问题:当上传文件到根目录时,
put方法中的dstDir为nil,导致dstDir.GetID()调用引发panic,此前将会导致500错误,文件在根目录将无法上传 -
API格式验证错误:Misskey API对
folderId有misskey:id格式要求,对于根目录来说,空字符串不满足此格式,根目录不传 folderId 字段,而不是传空字符串,导致上传失败:{"error":{"message":"Invalid param.","code":"INVALID_PARAM","id":"3d81ceae-475f-4600-b2a8-2bc116157532","kind":"client","info":{"param":"#/properties/folderId/format","reason":"must match format \"misskey:id\""}}} -
代码一致性:之前根目录判断逻辑分散在不同方法中,使用
dir.GetPath() != "/"和dir.GetID() == ""两种不同方式,需要统一
How Has This Been Tested? / 测试
测试步骤:
- 编译测试:使用
go fmt格式化代码,确保代码风格一致 - 类型检查:确保所有方法调用的类型匹配,避免编译错误
- 逻辑验证:
- 根目录
isRootFolder返回true,非根目录返回false handleFolderId对根目录返回nil,非根目录返回正确的ID字符串put方法中根目录不添加folderId字段,非根目录正确添加
- 根目录
测试场景:
- 文件上传到根目录
- 文件上传到子目录
- 文件夹创建在根目录
- 文件夹创建在子目录
- 文件/文件夹移动操作