Skip to content

Commit b338195

Browse files
committed
fix safari file upload issue
1 parent fc60e94 commit b338195

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

packages/web/src/hooks/useFiles.ts

+14-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,19 @@ 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 = (await fileTypeFromStream(uploadedFile.file.stream()))
122+
?.mime;
123+
} catch (error) {
124+
realMimeType = (
125+
await fileTypeFromBuffer(await uploadedFile.file.arrayBuffer())
126+
)?.mime;
127+
}
128+
if (!realMimeType) {
129+
console.error('Failed to get file type:', uploadedFile.file.name);
130+
return false;
131+
}
122132
// exception when file is doc or xls
123133
const isDocOrXls =
124134
['application/msword', 'application/vnd.ms-excel'].includes(

0 commit comments

Comments
 (0)