【问题标题】:updating a deployment - uploaded images gets deleted after redeployment to google cloud更新部署 - 重新部署到谷歌云后上传的图像被删除
【发布时间】:2020-05-06 00:59:53
【问题描述】:

所以我有一个 node js 网络应用程序,这个网络应用程序有一个文件夹来存储用户从移动应用程序上传的图像。我如何将图像上传到文件夹是使用图像的 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 命令似乎部署了整个项目。还是我应该将图像直接上传到谷歌云存储?

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

【问题讨论】:

    标签: node.js google-app-engine deployment google-cloud-platform google-appengine-node


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 2017-11-15
        • 2020-06-17
        • 2018-04-13
        • 2017-08-17
        相关资源
        最近更新 更多