Загрузите файл из safari с помощью объекта file, хранящегося в индексированной БД

#indexeddb

Вопрос:

Я хочу загрузить изображение из файловых объектов, которые хранятся в индексированной БД. Когда я тестировал в Chrome, он работал хорошо. Но в ПК и мобильном safari это не работает. Я проверил журнал консоли, прежде чем загрузить его. Я могу наблюдать файловый объект, и он также может быть преобразован в URL-адрес данных base64. Но не включен в тело запроса api. Данные формы являются нормальными, но данные запроса api содержат пустое содержимое файла.

Комментарии:

1. Возможным обходным путем, который приходит на ум, было бы клонирование файла: new File( [ await file_from_IDB.arrayBuffer() ], file_from_IDB.name ) .

2. @Kaiido Спасибо вам за ваш комментарий. Блоб-клон был ответом на этот случай. const fileData = filteredFiles.slice(0, 10).map((file) => { const blob = file.slice(); return new File([blob], file.name, { type: file.type }); });

3. В мобильном safari клонирование blob-объекта не работало, файл — > база 64 — > > файловый процесс работает хорошо. Наконец я решил не использовать индексированную БД из-за ее ограничения на хранение

4. Какой лимит хранения? IndexedDB-это одно из менее ограниченных хранилищ, которое у нас есть в браузере. Кроме того, в моем первом комментарии я сказал вам клонировать этот файл с помощью .arrayBuffer() метода, это займет гораздо меньше памяти, чем через URL-адрес данных.