Skip to content

Commit 009e107

Browse files
committed
fix safari file upload issue
1 parent 90d168e commit 009e107

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

packages/web/src/hooks/useFiles.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { create } from 'zustand';
22
import useFileApi from './useFileApi';
33
import { FileLimit, UploadedFileType } from 'generative-ai-use-cases';
44
import { produce } from 'immer';
5-
import { fileTypeFromStream } from 'file-type';
5+
import { fileTypeFromBuffer, fileTypeFromStream, MimeType } from 'file-type';
66
import { useCallback } from 'react';
77
import { v4 as uuidv4 } from 'uuid';
88
import i18next from 'i18next';
@@ -116,9 +116,20 @@ const useFilesState = create<{
116116
const isMimeSpoofedResults = await Promise.all(
117117
uploadedFiles.map(async (uploadedFile) => {
118118
// file.type is based on the extension, while fileTypeFromStream checks the file header signature
119-
const realMimeType = (
120-
await fileTypeFromStream(uploadedFile.file.stream())
121-
)?.mime;
119+
let realMimeType: MimeType | undefined;
120+
try {
121+
realMimeType = (
122+
await fileTypeFromStream(uploadedFile.file.stream())
123+
)?.mime;
124+
} catch (error) {
125+
realMimeType = (
126+
await fileTypeFromBuffer(await uploadedFile.file.arrayBuffer())
127+
)?.mime;
128+
}
129+
if (!realMimeType) {
130+
console.error('Failed to get file type:', uploadedFile.file.name);
131+
return false;
132+
}
122133
// exception when file is doc or xls
123134
const isDocOrXls =
124135
['application/msword', 'application/vnd.ms-excel'].includes(

0 commit comments

Comments
 (0)