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 在新的浏览器选项卡中打开图像文件