В моем приложении NativeScript- Vue я делаю POST-запрос к своему серверу и получаю двоичный файл. Это файл .zip, содержащий файл .db, который я хочу скопировать и инициализировать с помощью плагина nativescript-sqlite.
Я использую ax ios, и ответ POST выглядит так:
"PK {[oP'g�R 606.db�}`�����ו�N�-{�*�*�O炵W$�滓\(��t�KZ��dc2�e�C�Ĕ$�L
>b!��... and so on
Сейчас я тестирую на Android. Я сохраняю файл в папке Android Downloads, чтобы посмотреть, смогу ли я его распаковать. Я знаю, что File.write
принимает собственный байтовый массив, поэтому я пытаюсь получить его из строки двоичного файла.
import * as fs from "tns-core-modules/file-system";
async function saveToFile(binary) { // binary = "PK {[oP'g�R...
let folder = fs.Folder.fromPath(android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath());
let zipFile = folder.getFile("Database.zip");
// string to buffer
let buffer = new ArrayBuffer(binary.length);
let view = new Uint8Array(buffer);
for (let i = 0; i < view.length; i++) {
view[i] = binary.charCodeAt(i);
}
// buffer to native byte array
let array = Array.create("byte", view.byteLength);
for (let i = 0; i < view.byteLength; i++) {
array[i] = new java.lang.Byte(view[i]);
}
await zipFile.write(array);
}
Я думаю, что я делаю что-то не так, циклически повторяя массивы два раза, в любом случае я в состоянии записать файл, но я не могу открыть его как .zip. Любая помощь?