如何在节点后端存储图像?

2023-12-09

我使用 Node 和 Express 作为后端,使用 Mongo DB 进行存储。我使用 multer 中间件来存储图像,我遇到了一个问题,问题是当我从本地主机存储图像时,它会保存在我的后端中,并且也会显示在数据库中,但是当我在heroku或任何其他应用程序上部署相同的api时,图像显示在数据库中,但没有存储在我的后端中。我已经在邮递员上测试了代码,可能是什么问题?

以下是我在 Node.js 上的代码:

router.use(express.static(__dirname + 'public'));

let storage = multer.diskStorage({
destination: function (req, file, cb) {
    cb(null, 'public')
},
filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})

let upload = multer({ storage: storage })
router.post('/fellows-details', upload.single('image'), async (req, res) => {

const { error } = FellowsDetails(req.body);
if (error) return res.status(400).send({ message: error.details[0].message });
const fellow = new fellowdetails({
    name: req.body.name,
    details: req.body.details,
    image: req.file.filename
})
try {
    fellow.save()
    res.status(200).send({ message: 'fellows detail saved successfully' })
} catch (err) {
    res.status(400).send(err);
}
})

转换为字符串后,存储文件变得很容易 您只需在前端转换图像中的字符串

将图像转换为base64在您的 api 中使用此代码的字符串,也不要忘记从上传文件夹中删除文件

"img": new Buffer.from(fs.readFileSync(req.file.path)).toString("base64")

删除文件

           let resultHandler = function (err) {
                if (err) {
                    console.log("unlink failed", err);
                } else {
                    console.log("file deleted");
                }
            }

            fs.unlink(req.file.path, resultHandler);

在您的路线进口multer

 `multer const multer = require('multer');
  const upload = multer({ dest: __dirname + '/uploads/images' });`

Add upload.single('img')在你的要求中

router.post('/fellows-details', authorize([Role.ADMIN, Role.USER]), 
            upload.single('img'), usersController.fellowsdetails);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在节点后端存储图像? 的相关文章

随机推荐

  • 使用 MPMoviePlayerController 播放电影时隐藏状态

    我已经使用隐藏应用程序中的状态栏 UIApplication sharedApplication setStatusBarHidden YES 但是当我播放电影时 它会自动在顶部显示状态栏 有谁知道如何在播放电影时隐藏状态栏 您可以订阅MP
  • 如何使用通配符执行 SQLite LIKE 查询而不是读取为通配符

    当查询恰好具有 或 通配符的文本字段时 我在 SQLite 中遇到问题 我有一个带有 名称 字段的表 我想查询 我的两条记录在我想要查询的 名称 字段中具有值 test 和 te t 如果我运行如下查询 SELECT ALL from Ta
  • 将 2010 Q1 转换为日期时间 2010-3-31

    如何找到将 Year Q 转换为日期时间的智能解决方案 我尝试使用 pd to datetime working visa nationality Year Q 但出现错误说无法识别 所以我尝试了一个愚蠢的方法 working visa n
  • 帮助破译这个致命错误(Java)

    Java 运行时环境检测到致命错误 EXCEPTION ACCESS VIOLATION 0xc0000005 at pc 0x762a76d0 pid 4072 tid 2984 JRE version 6 0 26 b03 Java V
  • 查看通货膨胀和自定义视图

    我的应用程序中有一个自定义视图 我使用onDraw 视图中的函数 它还需要来自活动的一些数据来绘制图形 所以不要使用标准setContentView R layout myview 我正在使用以下内容 MyView mv new MyVie
  • WebAPI OData 日期时间序列化

    我需要更改 OData 序列化的方式DateTime and DateTimeOffset 目前我们正在使用Microsoft AspNet OData 5 9 0 默认情况下 格式最有可能是yyyy MM dd T HH mm ss FF
  • 在 Objective-C 中调用 C 函数从 Nib 唤醒

    我必须在 Objective C 类中实现一个 C 函数 该函数通常会被调用int main 在它自己的文件中 由于我不熟悉拼接代码 我需要知道如何在awakefromnib or applicationDidFinishLaunching
  • C++11 变量初始化和声明

    C 11 带来了一种初始化和声明变量的新方法 Original int c derived 0 C 11 int modern 0 每种方法有哪些优缺点 如果有的话 为什么要实施新方法 编译器做了什么不同的事情吗 你错了 int moder
  • 将 MBF Single 和 Double 转换为 IEEE

    Follow Up available There s a follow up with further details see Convert MBF to IEEE At thisWiki 页面上有一些不同代码示例的链接 用于在 C C
  • Sequelize:多个 where 子句

    我有以下表格 文章 用户 标签 关注者 订阅 文章属于用户 fk 文章表中的 userId 文章可以有多个标签 这是生成的 tagarticle 表 这是关注者表 以及订阅表 一个用户可以关注多个用户并订阅一个国家 payId 一个标签或一
  • mySQL 错误 1040:连接过多

    如何修复这些 SQL 错误 1040 连接过多 即使我尝试把 max user connection 500 仍然是 连接太多 MySQL 错误 1040 连接过多 这基本上表明 MySQL 同时处理最大连接数 默认情况下它处理100同时连
  • 如何更改 showModalBottomSheet 的大小? [扑]

    我正在使用一个showModalBottomSheet我想更改小部件的大小 使其占据大约 75 的屏幕 默认情况下它似乎占据 50 我尝试按照文档进行操作 但找不到尺寸属性 有人可以建议我一种更改此小部件大小的方法吗 目前看起来像这样 Co
  • 函数的多次返回

    是否可以有一个具有两个返回值的函数 如下所示 function test testvar Do something return var1 return var2 如果是这样 我如何才能分别获得每笔回报 从技术上讲 您不能返回多个值 但是
  • ASP.NET MVC 3 将 KeyValuePair 类型的用户控件绑定到 ViewModel

    我创建了一个继承 KeyValuePair 的特殊用户控件 在我的 ViewModel 中 有一个名为 Lookup 的属性 UIHint Lookup public KeyValuePair
  • 在 Mybatis 属性文件中使用环境变量

    我正在使用 mybatis 连接到数据库 并且我已在外部属性文件中存储了一些架构信息 我已将此属性文件保存在磁盘上的某个位置 并在我的config xml像下面这样 在配置 xml中
  • 从别名命名空间中的字符串名称创建新的类实例

    我见过这样的问题this and this 但两者都没有解决如何从字符串名称创建类实例 如果您已经有命名空间并且该类位于别名命名空间中
  • 获取我的网站访问者的 Facebook 用户 ID(无需身份验证)

    有没有办法使用 FB API 获取我网站访问者的 Facebook 用户 ID 而不需要要求他们验证我的 Facebook 应用程序 我所需要的只是一些与 facebook 相关的标识符 它甚至不必是用户 ID 而是可以将用户与 faceb
  • 删除 GAS 中无效的命名范围

    我在工作表中定义了一些命名范围 稍后将其删除 之后 范围保留在侧边栏中 数据 gt 命名范围 范围为 REF 我想删除它们 因为我不想让它们累积 他们没有被列在SpreadsheetApp GetActiveSpreadsheet getN
  • 使用过滤功能时,如何按原样返回空白单元格而不是打印为零

    在使用过滤功能时参考图像中显示的数据并获取返回值 如何在使用过滤功能时按原样返回空白单元格而不是打印为零 FILTER A2 C13 A2 A13 E1 在使用过滤功能时参考图像中显示的数据并获取返回值 如何在使用过滤功能时按原样返回空白单
  • 如何在节点后端存储图像?

    我使用 Node 和 Express 作为后端 使用 Mongo DB 进行存储 我使用 multer 中间件来存储图像 我遇到了一个问题 问题是当我从本地主机存储图像时 它会保存在我的后端中 并且也会显示在数据库中 但是当我在heroku