在 NativeScript 中将 POST 响应保存为文件
Save POST response as file in NativeScript
在我的 NativeScript-Vue 应用程序中,我向我的服务器发出 POST 请求并接收一个二进制文件。这是一个包含 .db 文件的 .zip 文件,我想用 nativescript-sqlite 插件复制和初始化它。
我正在使用 axios,POST 响应如下所示:
"PK {[oP'g�R 606.db�}`�����ו�N�-{�*�*�O炵W$�滓\(��t�KZ��dc2�e�C�Ĕ$�L
>b!��... and so on
现在我正在 Android 上进行测试。我正在将文件保存到 Android 下载文件夹,看看是否可以解压缩。我知道 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。有帮助吗?
解决了从 axios 到 NativeScript HTTP 模块的切换,直接处理文件对象而不是字符串。
import { getFile } from "tns-core-modules/http";
import { Zip } from "nativescript-zip";
async function saveDatabaseToFile() {
let folder = fs.knownFolders.temp();
let zipFile = await getFile({
method: "POST", // url, headers, content
});
await file.rename("Database.zip"); // extension was messed up
await Zip.unzip({
archive: file.path,
directory: folder.path
});
let files = await folder.getEntities();
let dbFile = files.find(file => file._extension === ".db");
return dbFile;
}
在我的 NativeScript-Vue 应用程序中,我向我的服务器发出 POST 请求并接收一个二进制文件。这是一个包含 .db 文件的 .zip 文件,我想用 nativescript-sqlite 插件复制和初始化它。
我正在使用 axios,POST 响应如下所示:
"PK {[oP'g�R 606.db�}`�����ו�N�-{�*�*�O炵W$�滓\(��t�KZ��dc2�e�C�Ĕ$�L
>b!��... and so on
现在我正在 Android 上进行测试。我正在将文件保存到 Android 下载文件夹,看看是否可以解压缩。我知道 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。有帮助吗?
解决了从 axios 到 NativeScript HTTP 模块的切换,直接处理文件对象而不是字符串。
import { getFile } from "tns-core-modules/http";
import { Zip } from "nativescript-zip";
async function saveDatabaseToFile() {
let folder = fs.knownFolders.temp();
let zipFile = await getFile({
method: "POST", // url, headers, content
});
await file.rename("Database.zip"); // extension was messed up
await Zip.unzip({
archive: file.path,
directory: folder.path
});
let files = await folder.getEntities();
let dbFile = files.find(file => file._extension === ".db");
return dbFile;
}