
























@@ -716,4 +716,60 @@ describe("downloadMessageResourceFeishu", () => {
716716fileName: "clip.mp4",
717717});
718718});
719+720+it("recovers CJK filenames from plain Content-Disposition headers decoded as Latin-1", async () => {
721+const fileName = "武汉15座山登山信息汇总.csv";
722+const latin1HeaderFileName = Buffer.from(fileName, "utf8").toString("latin1");
723+messageResourceGetMock.mockResolvedValueOnce({
724+data: Buffer.from("fake-file-data"),
725+headers: {
726+"content-disposition": `attachment; filename="${latin1HeaderFileName}"`,
727+},
728+});
729+730+const result = await downloadMessageResourceFeishu({
731+cfg: emptyConfig,
732+messageId: "om_file_msg",
733+fileKey: "file_key_csv",
734+type: "file",
735+});
736+737+expect(result.fileName).toBe(fileName);
738+});
739+740+it("keeps valid Latin-1 filenames from plain Content-Disposition headers unchanged", async () => {
741+messageResourceGetMock.mockResolvedValueOnce({
742+data: Buffer.from("fake-file-data"),
743+headers: {
744+"content-disposition": `attachment; filename="café-©.txt"`,
745+},
746+});
747+748+const result = await downloadMessageResourceFeishu({
749+cfg: emptyConfig,
750+messageId: "om_latin1_msg",
751+fileKey: "file_key_latin1",
752+type: "file",
753+});
754+755+expect(result.fileName).toBe("café-©.txt");
756+});
757+758+it("keeps JSON-derived file_name metadata unchanged", async () => {
759+const fileName = "武汉15座山登山信息汇总.csv";
760+const latin1LookingFileName = Buffer.from(fileName, "utf8").toString("latin1");
761+messageResourceGetMock.mockResolvedValueOnce({
762+data: Buffer.from("fake-file-data"),
763+file_name: latin1LookingFileName,
764+});
765+766+const result = await downloadMessageResourceFeishu({
767+cfg: emptyConfig,
768+messageId: "om_json_file_msg",
769+fileKey: "file_key_json",
770+type: "file",
771+});
772+773+expect(result.fileName).toBe(latin1LookingFileName);
774+});
719775});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。