0

所以我有一个 node js web 应用程序,这个 web 应用程序有一个文件夹来存储用户从移动应用程序上传的图像。我如何将图像上传到文件夹是使用图像的 base64 字符串,并使用 fs.writeFile 将图像保存到文件夹,如下所示:

fs.writeFile(__dirname + '/../images/complaintImg/complaintcase_' + data.cID + '.jpg', Buffer.from(data.complaintImage, 'base64'), function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log("success");
    }
});

问题是,每当应用程序重新部署到谷歌云时,图像就会被删除。这是因为应用程序的本地版本的图像文件夹是空的 - 当用户上传图像时,我没有获得该图像的本地副本。

如何防止图像在每次部署时都被删除?因为应用程序会不断更新(更改 js 或 html 文件),所以我不能在每次部署时都删除图像。如何更新部署以仅部署某些文件?该gcloud app deploy命令似乎部署了整个项目。还是我应该将图像直接上传到谷歌云存储?

请帮忙,目前移动应用程序还没有向公众发布,所以每次部署删除图像现在仍然不是什么大问题,但一旦向公众发布就会有。因为他们上传的图片非常重要。先感谢您!

4

2 回答 2

0

正如 Dan Cornilescu 的回答中所述,对于用户上传的文件,您应该将它们存储在GAE StandardGAE Flexible的云存储中。

作为参考,对于那些使用 Python 2.7、Java 8 或 PHP 5 的人来说,还有一个替代方案,即BlobStore API

于 2020-01-20T14:55:49.540 回答
0

看来__dirname您选择的目录可能位于您的实例本地的/tmp其他目录下,或者如果您使用灵活环境,则可能位于其他目录下。如果是这样,只要启动新实例,图像就会消失(这总是在新部署时发生,但也可能在部署之间发生)。这是意料之中的,实例总是“从头开始”启动。

您需要存储您的应用程序创建的文件,并且您希望实例(重新)在持久存储产品(如 Cloud Storage)上继续存在,请参阅使用云存储(或使用云存储实现灵活的环境)。请注意,您不能将常规文件系统调用与 Cloud Storage 一起使用,您需要使用记录在案的客户端库。

于 2020-01-20T04:46:57.307 回答