AlistGo/alist · error

unsupported lark export file type: %s

Error message

unsupported lark export file type: %s

What it means

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.

Source

Thrown at drivers/lark/other.go:261

	}
	if resp.File == nil {
		return nil, "", errors.New("lark export download response missing file")
	}
	return resp.File, resp.FileName, nil
}

func larkExportType(name string) (string, error) {
	switch {
	case strings.HasSuffix(name, ".lark-doc"):
		return larkdrive.TypeDoc, nil
	case strings.HasSuffix(name, ".lark-docx"):
		return larkdrive.TypeDocx, nil
	case strings.HasSuffix(name, ".lark-sheet"):
		return larkdrive.TypeSheet, nil
	case strings.HasSuffix(name, ".lark-bitable"):
		return larkdrive.TypeBitable, nil
	default:
		return "", fmt.Errorf("unsupported lark export file type: %s", name)
	}
}

func larkExportFormatAllowed(docType, format string) bool {
	switch docType {
	case larkdrive.TypeDoc, larkdrive.TypeDocx:
		return format == larkdrive.FileExtensionPdf || format == larkdrive.FileExtensionDocx
	case larkdrive.TypeSheet, larkdrive.TypeBitable:
		return format == larkdrive.FileExtensionXlsx || format == larkdrive.FileExtensionCsv
	default:
		return false
	}
}

func larkExportFormatRequiresSubID(docType, format string) bool {
	return (docType == larkdrive.TypeSheet || docType == larkdrive.TypeBitable) && format == larkdrive.FileExtensionCsv
}

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Filter to the four supported pseudo-extensions before requesting an export.
  2. Upgrade OpenList so newly supported lark types are covered.
  3. Skip or report non-exportable objects instead of failing the whole batch.

Example fix

// before
for _, obj := range objs {
    createExportTask(ctx, obj, req) // fails on README.pdf
}
// after
for _, obj := range objs {
    if s := obj.GetName(); strings.HasSuffix(s, ".lark-doc") || strings.HasSuffix(s, ".lark-docx") ||
       strings.HasSuffix(s, ".lark-sheet") || strings.HasSuffix(s, ".lark-bitable") {
        createExportTask(ctx, obj, req)
    }
}
Defensive patterns

Strategy: type-guard

Validate before calling

switch {
case strings.HasSuffix(name, ".lark-doc"), strings.HasSuffix(name, ".lark-docx"),
     strings.HasSuffix(name, ".lark-sheet"), strings.HasSuffix(name, ".lark-bitable"):
    // safe to export
default:
    skip("not an exportable lark document: " + name)
}

Type guard

func isExportableLarkDoc(name string) bool {
    return strings.HasSuffix(name, ".lark-doc") || strings.HasSuffix(name, ".lark-docx") ||
        strings.HasSuffix(name, ".lark-sheet") || strings.HasSuffix(name, ".lark-bitable")
}

Try / catch

if err != nil && strings.Contains(err.Error(), "unsupported lark export file type") {
    continue // skip non-lark objects in batch flows
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/4534f5c4fdcb5318. Report an issue: GitHub.