Skip to content

Conversation

@vxtls
Copy link

@vxtls vxtls commented Nov 15, 2025

Description / 描述

主要更改:

  1. 修复panic问题

    • put方法中添加了空值检查,避免对nil调用GetID()
  2. 修复Misskey API的folderId格式问题

    • handleFolderId返回类型从string改为interface{}
    • 根目录返回nil而不是空字符串,避免触发misskey:id格式验证错误
    • put方法中正确处理form data,只有非根目录才添加folderId字段
  3. 添加根目录检查逻辑

    • 新增isRootFolder函数统一判断是否为根目录
    • 在所有相关方法中统一使用isRootFolder函数:
      • getFilesgetFolders:根目录不传folderId
      • handleFolderId:根目录返回nil
      • put:根目录不添加folderId到formData
  4. 代码优化

    • 统一了根目录判断逻辑,提高代码可维护性
    • 修复了类型转换问题,确保编译通过
    • 使用 http.MethodPost 代替手动编码的POST

Motivation and Context / 背景

为什么需要此更改?它解决了什么问题?

  1. Panic问题:当上传文件到根目录时,put方法中的dstDir为nil,导致dstDir.GetID()调用引发panic,此前将会导致500错误,文件在根目录将无法上传

  2. API格式验证错误:Misskey API对folderIdmisskey: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\""}}}
    
  3. 代码一致性:之前根目录判断逻辑分散在不同方法中,使用dir.GetPath() != "/"dir.GetID() == ""两种不同方式,需要统一

How Has This Been Tested? / 测试

测试步骤:

  1. 编译测试:使用go fmt格式化代码,确保代码风格一致
  2. 类型检查:确保所有方法调用的类型匹配,避免编译错误
  3. 逻辑验证
    • 根目录isRootFolder返回true,非根目录返回false
    • handleFolderId对根目录返回nil,非根目录返回正确的ID字符串
    • put方法中根目录不添加folderId字段,非根目录正确添加

测试场景:

  • 文件上传到根目录
  • 文件上传到子目录
  • 文件夹创建在根目录
  • 文件夹创建在子目录
  • 文件/文件夹移动操作

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant