Реагировать на собственный файл blob из данных API, мне нужно сохранить его в zip-файл, как это сделать в ios

const downloadJobApplied = async (isNew = false) => {
    try {
        // Download the blob data
        const response = await RNFetchBlob.fetch('GET', `${API_URL}/business/jobsApplied?isNew=${isNew}&from=${queryParams.from}&to=${queryParams?.to}`, {
            Authorization: `Bearer ${token}`,
        });
        const blobData = response.data;

        // Define the path to save the file
        const timestamp = new Date().getTime(); // Get current timestamp

        const filePath = `${RNFetchBlob.fs.dirs.DocumentDir}/Resume${timestamp}.zip`;


        // Save the blob data to a file
        await RNFetchBlob.fs.writeFile(filePath, blobData, 'base64');

        setIsShow("RESUME_DOWNLOAD_SUCESS")

    } catch (error) {
        console.error('Error saving file: ', error);
    }
};

У меня есть ответный объект, и мне нужно сохранить его в формате zip в ios. Этот код будет работать для Android. Мне нужно предложение, как достичь ios. Спасибо за помощь, я включаю все разрешения, но оно не работает.

0
0
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не мог добавить комментарий к этому вопросу, но подумал, что могу оставить отзыв. Судя по вашему вопросу, вы пытаетесь заархивировать файл, загруженный из внешнего источника, с помощью Javascript в React-Native.

На основе предоставленного вами кода вы уже смогли загрузить файл, создать новый файл с расширением .zip, закодировать данные загрузки в base64 и поместить эти данные во вновь созданный файл.

Хотя то, что вы делаете, создает файл с расширением .zip, я не могу быть уверен, что полученный файл будет сжатым (загружаемый файл уже является сжатым?). Судя по вашему коду, он будет просто закодирован в формате Base64. Хотя я не уверен, почему этот код не работает в IOS, возможно, исправление сжатия также решит эту проблему.

Чтобы обеспечить сжатие и создать настоящий ZIP-файл с помощью Javascript, вам потребуется дополнительная библиотека. В данном случае я выбрал JSZip.

Установить библиотеку: npm install jszip

Включить импорт: import JSZip from 'jszip';

использовать JSZip для сжатия:

var zip = new JSZip();
zip.file(filePath, blobData);
zip.generateAsync({type:"base64"}).then(function (content) {
     location.href = "data:application/zip;base64," + content;
});

Если реальная проблема, с которой вы столкнулись, заключается в том, что файл не создается с содержимым на вашем устройстве IOS, это может быть связано с проблемой, обсуждаемой здесь, когда символы новой строки мешали записи файла, но не выбрасывали его. ошибка. В этом случае вы можете сделать то, что было предложено в этом потоке, и удалить символы новой строки из данных перед их передачей в rn-fetch-blob. Но без дальнейшего устранения неполадок я не могу быть уверен в другом решении. Надеюсь это поможет.

Другие вопросы по теме