Heroku 图像在新的推送中消失了

Posted

技术标签:

【中文标题】Heroku 图像在新的推送中消失了【英文标题】:Heroku images are gone in new pushes 【发布时间】:2021-08-28 08:56:16 【问题描述】:

需要您的帮助! 我将我的 nodejs 应用程序(仅后端)部署到 heroku,它包括用户必须以 jpg、jpeg、png 格式插入文档的部分!所有图片都位于静态文件夹(/assets/docs)中!在推送更改的代码之前,我尝试创建用户并显示他们的图片!但是当我对heroku进行新的推送时,旧文件已经消失并且没有显示! 我试图在新推送中忽略该静态文件夹 - /assets/docs/* 无用,/assets - 无用,/assets/docs - 无用 但作为一个实验,我将 1 个 .jpg 文件放在该静态文件夹中并推送它。即使在新的推动下它也总是保持不变(也有忽略) 使用 multer 和 mongoose

使用 multer 上传文件

const multer = require('multer')
const path = require('path')

const storage = multer.diskStorage(
    destination: 'assets/docs/',
    filename: function(req, file, cb) 
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
    
)

const up = multer(
    storage: storage,
    limits: 
        fileSize: 5 * 1024 * 1024
    ,
    fileFilter(req, file, cb) 
        if (!file.originalname.match(/\.(png|jpg|jpeg|docx|doc|pdf)$/)) 
            return cb (Error("Allowed file types are png jpg jpeg docx doc pdf"), false)
        

        cb (null, true)
    
)

保存文件 - 猫鼬

router.post('/register-employee', uploadDocument.single('passport'), async (req, res) => 
    try 
        const emp = await new Employee(
            ...req.body,
            passport: `docs/$req.file.filename`
        )

        await emp.save()

        res.json(emp)
     catch (e) 
        res.status(500).json(errorMessage: e.message)
    
)

gitignore 文件

/node_modules
/.vscode
/.idea
/config
/assets/docs

设置公用文件夹

const publicDir = path.join(__dirname, '../assets')
app.use(express.static(publicDir))

【问题讨论】:

这能回答你的问题吗? Uploaded Image Disappeard When Heroku Server Restart 【参考方案1】:

Heroku 文件系统是短暂的 - 这意味着在 dyno 运行期间对文件系统的任何更改只会持续到该 dyno 关闭或重新启动。

每个测功机都使用最新部署的文件系统的干净副本启动。这类似于有多少基于容器的系统(例如 Docker)在运行。

您可以通过使用 Amazon s3 等外部文件存储系统在测功机上重新启动时保留数据来解决此问题。

您可以在这里阅读更多内容:https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

【讨论】:

但我在 assets/doc 文件夹中添加了名为 123.jpg 的静态图像!它总是在那里 那是因为那是构建过程的一部分。一旦实例停止或重新启动,实例启动后添加的任何数据都将被丢弃。

以上是关于Heroku 图像在新的推送中消失了的主要内容,如果未能解决你的问题,请参考以下文章

在新的、更大的图像中居中图像资源 (PHP/imagecopy)

.NET WEB API 使用 FTP 在新的浏览器选项卡中打开图像文件

强制Heroku重新编译所有资产

在新 CRA 中使用 babel 转译包后 CSS 和图像文件未出现

Rails 4图像未在heroku上加载

星级图像未部署到 Heroku