{"record":{"id":"4534f5c4fdcb5318","repo":"AlistGo/alist","slug":"unsupported-lark-export-file-type-s","errorCode":null,"errorMessage":"unsupported lark export file type: %s","messagePattern":"unsupported lark export file type: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/lark/other.go","lineNumber":261,"sourceCode":"\t}\n\tif resp.File == nil {\n\t\treturn nil, \"\", errors.New(\"lark export download response missing file\")\n\t}\n\treturn resp.File, resp.FileName, nil\n}\n\nfunc larkExportType(name string) (string, error) {\n\tswitch {\n\tcase strings.HasSuffix(name, \".lark-doc\"):\n\t\treturn larkdrive.TypeDoc, nil\n\tcase strings.HasSuffix(name, \".lark-docx\"):\n\t\treturn larkdrive.TypeDocx, nil\n\tcase strings.HasSuffix(name, \".lark-sheet\"):\n\t\treturn larkdrive.TypeSheet, nil\n\tcase strings.HasSuffix(name, \".lark-bitable\"):\n\t\treturn larkdrive.TypeBitable, nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unsupported lark export file type: %s\", name)\n\t}\n}\n\nfunc larkExportFormatAllowed(docType, format string) bool {\n\tswitch docType {\n\tcase larkdrive.TypeDoc, larkdrive.TypeDocx:\n\t\treturn format == larkdrive.FileExtensionPdf || format == larkdrive.FileExtensionDocx\n\tcase larkdrive.TypeSheet, larkdrive.TypeBitable:\n\t\treturn format == larkdrive.FileExtensionXlsx || format == larkdrive.FileExtensionCsv\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc larkExportFormatRequiresSubID(docType, format string) bool {\n\treturn (docType == larkdrive.TypeSheet || docType == larkdrive.TypeBitable) && format == larkdrive.FileExtensionCsv\n}\n","sourceCodeStart":243,"sourceCodeEnd":279,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/lark/other.go#L243-L279","documentation":"Type-derivation error in the Lark driver's export flow: larkExportType maps the object name's suffix to a Lark drive type (.lark-doc->doc, .lark-docx->docx, .lark-sheet->sheet, .lark-bitable->bitable). Any other extension falls through to the default branch and the whole name is included in the error message.","triggerScenarios":"Calling export on a regular file (e.g. .pdf, .txt, .mp4) or on a lark pseudo-extension not in the switch (e.g. .lark-mindnote, .lark-slides). The object simply is not exportable via this API.","commonSituations":"Scripts that iterate a mixed folder and try to export every object; lark introducing new document kinds (mindnotes, slides) this driver version does not handle; upstream naming conventions changing.","solutions":["Filter to the four supported pseudo-extensions before requesting an export.","Upgrade OpenList so newly supported lark types are covered.","Skip or report non-exportable objects instead of failing the whole batch."],"exampleFix":"// before\nfor _, obj := range objs {\n    createExportTask(ctx, obj, req) // fails on README.pdf\n}\n// after\nfor _, obj := range objs {\n    if s := obj.GetName(); strings.HasSuffix(s, \".lark-doc\") || strings.HasSuffix(s, \".lark-docx\") ||\n       strings.HasSuffix(s, \".lark-sheet\") || strings.HasSuffix(s, \".lark-bitable\") {\n        createExportTask(ctx, obj, req)\n    }\n}","handlingStrategy":"type-guard","validationCode":"switch {\ncase strings.HasSuffix(name, \".lark-doc\"), strings.HasSuffix(name, \".lark-docx\"),\n     strings.HasSuffix(name, \".lark-sheet\"), strings.HasSuffix(name, \".lark-bitable\"):\n    // safe to export\ndefault:\n    skip(\"not an exportable lark document: \" + name)\n}","typeGuard":"func isExportableLarkDoc(name string) bool {\n    return strings.HasSuffix(name, \".lark-doc\") || strings.HasSuffix(name, \".lark-docx\") ||\n        strings.HasSuffix(name, \".lark-sheet\") || strings.HasSuffix(name, \".lark-bitable\")\n}","tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"unsupported lark export file type\") {\n    continue // skip non-lark objects in batch flows\n}","preventionTips":["Filter objects by pseudo-extension before batch export.","Upgrade the driver when lark ships new document types.","Show the object name in error UIs so users see which file was skipped."],"tags":["lark","feishu","export","file-type","validation","go"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}