我正在做一个nodejs应用程序,它显示存储在服务器上的图片,我使用multer将图片存储在同一目录中,我使用mongodb作为我的数据库来存储用户上传的图片的路径,然后我读取路径并显示图片,如下所示,
<div class="post-image flex">
<%var imagesource='../'+postobj.blob.path%>
<div>
<img class='onbottomimage' src="<%=imagesource%>" >
</div>
</div>一切都在本地运行得很好。但现在我已经将我的应用程序部署到heroku上,并发现我不能在heroku上存储图片,因为用户上传它们,我仍然将图片存储在mongodb中,格式为Base64,如下所示
image
:
Binary('/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/+EUI0V4aWYAAE1NACoAAAAIAAcBMgACAAAAFAAAAGIBOwACAAAA...', 0)我如何将它们转换回图片并在ejs中的img标签中显示它们,或者我有哪些其他选项,我不想更改heroku,但仍然可以显示用户上传的图片。
发布于 2020-07-18 02:13:34
如果你将上传的图片存储在Heroku服务器上,这是一种彻底的浪费。因为Heroku Dyno每天都会重启,这将删除除部署期间存储的数据以外的所有额外添加的数据。我认为您使用的是express。
let fs=require("fs")
let yourBuffer=//retrieve that buffer and store into this(yourBuffer) variable
let buffer = new Buffer.from(yourBuffer)
fs.writeFile(`location to storeimage/imagename.yourimageextension`, buffer, "binary", function (err, written) {
if (err) console.log(err);
else {
console.log("Successfully written");
res.sendFile((__dirname + `location of image/imagename.yourimageextension`))
}
});发布于 2020-07-18 01:32:53
我认为更好的解决方案是使用第三方存储提供商,例如aws s3,并且只在数据库中存储图像url。
https://stackoverflow.com/questions/62958963
复制相似问题