我在 Google Cloud App Engine 上运行节点 js 服务器服务。我在项目的资产文件夹中有 JSON 文件,需要按流程进行更新。我能够读取文件中的文件和配置。但是当添加从 GAE 获取只读服务错误的文件时。
有没有一种方法可以在不使用云存储选项的情况下将信息写入文件?
它是一个非常小的文件,使用云存储将使用非常大的钻机来拧内六角扳手螺丝
谢谢
我在 Google Cloud App Engine 上运行节点 js 服务器服务。我在项目的资产文件夹中有 JSON 文件,需要按流程进行更新。我能够读取文件中的文件和配置。但是当添加从 GAE 获取只读服务错误的文件时。
有没有一种方法可以在不使用云存储选项的情况下将信息写入文件?
它是一个非常小的文件,使用云存储将使用非常大的钻机来拧内六角扳手螺丝
谢谢
不,在 App Engine Standard 中没有这样的文件系统。在docs中,提到了以下内容:
运行时包括一个完整的文件系统。文件系统是只读的,但位置 /tmp 除外,它是在 App Engine 实例的 RAM 中存储数据的虚拟磁盘。
因此,考虑到这一点,您可以写入,/tmp
但我建议使用 Cloud Storage,因为如果缩放关闭所有实例,数据将会丢失。
您还可以考虑提供 HDD 的 App Engine Flex(因为它的后端是 VM),但最小大小为 10GB,因此它比使用存储更糟糕。
曾经感谢您引导我不要浪费时间寻找解决问题的黑客解决方案。
无论如何,没有明确的代码如何使用 /tmp 目录并使用应用程序引擎托管的 node.js 应用程序下载/上传文件。如果有人需要,这是代码
const {
Storage
} = require('@google-cloud/storage');
const path = require('path');
class gStorage {
constructor() {
this.storage = new Storage({
keyFile: 'Please add path to your key file'
});
this.bucket = this.storage.bucket(yourbucketname);
this.filePath = path.join('..', '/tmp/YourFileDetails');
// I am using the same file path and same file to download and upload
}
async uploadFile() {
try {
await this.bucket.upload(this.filePath, {
contentType: "application/json"
});
} catch (error) {
throw new Error(`Error when saving the config. Message : ${error.message}`);
}
}
async downloadFile() {
try {
await this.bucket.file(filename).download({
destination: this.filePath
});
} catch (error) {
throw new Error(`Error when saving the config. Message : ${error.message}`);
}
}
}