Nodejs 和 Express 中的 Multer 图像上传

2024-03-22

几天来我一直在尝试使用 Multer 上传图像。这就是我已经走了多远。我尝试了多种方法,但似乎无法使其发挥作用。我不知道如何使用 Multer 在 createUser 函数中按如下所示的格式上传图像。

我的“server.js”文件:

var express = require('express');
var multer = require('multer');
var upload = multer({dest: 'uploads/'});
var router = require('./app/routes');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var session = require('client-sessions');
var DB_URI = "mongodb://localhost:27017/portfolio";
var app = express();
var path = require('path');
var fs = require('fs');
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(__dirname+ '/public'));
app.use(session({
  cookieName: 'session',
  secret: 'random_string_goes_here',
  duration: 30 * 60 * 1000,
  activeDuration: 5 * 60 * 1000,
}));

mongoose.connect(DB_URI);
app.use(router);

app.listen(8080, function(){
    console.log("server is listening on port 8080");
})

我的“routes.js”

var express = require('express');
var router = express.Router();
var projectController = require('./controllers/projectController');
var userController = require('./controllers/userController');
router.post('/regUser', userController.createUser);

我的“index.ejs”

<form class="form inv" method="POST" action="/regUser" id="reg_form">
          <h3 style="margin-bottom:40px;">Register</h3>
          <!-- <input type="file" name="file"/> -->
          <input type="text" class="form-control" name="name" placeholder="Name"/>
          <input type="text" class="form-control" name="username" placeholder="Username"/>
          <input type="text" class="form-control" name="email" placeholder="Email"/>
          <input type="password" class="form-control" name="password" placeholder="Password"/>
          <input type="file" name="userPhoto"/>
          <input type="submit" class="btn btn-default" value="Submit"/>
        </form>

我的 userController.js

createUser: function(req, res){
//add code to create user AND upload image
}

有两个问题。

首先:您的表单没有设置 enctype 属性。enctype="multipart/form-data"需要提交文件才能工作。

第二:你需要multer,但你没有使用它。添加这个

app.use(multer({ dest: '/tmp/'}).single('userPhoto'))

(或用另一种方法(查看文档 https://www.npmjs.com/package/multer), like .array() or .fields())

然后您可以访问该文件createUser()像这样:

createUser: function(req, res){
    console.log(req.file); // this displays the userPhoto's properties
    fs.readFile(req.file.path, function (err, data) {
        // do something with the file data
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs 和 Express 中的 Multer 图像上传 的相关文章

随机推荐

  • 是否可以使用 flutter 相机插件流式传输视频?

    我一直在使用相机插件 我知道可以通过CameraController与功能start stopVideoRecording 这些函数将采用文件的路径作为输入 我希望能够在录制时将该视频流式传输到服务器 是否可以通过相机插件的当前功能以某种方
  • 如何控制画布对象的 z-index?

    当我在画布上绘制一些对象时 有时新对象会放在旧对象下面 例如 我将一些图像添加到画布上 然后画一条线 当我运行代码时 图像位于最上面 我在网上搜索了解决方案 但没有一个直接的解决方案 在某些情况下 它被视为资源管理器中的一个错误 我如何控制
  • 如何在玩笑测试中模拟 json.parse()

    我的代码中有一个 try catch 当代码落入catch它的一部分命中了 JSON parse catch err JSON parse err message 代码可以工作 但测试失败 测试只是断言尝试中发生了一些事情 try popU
  • 如何展开到导航堆栈上的第一个视图控制器

    我在将视图展开到登录屏幕时遇到问题 故事板结构如下 故事板结构 https i stack imgur com Ea1t8 png 该应用程序的用户流程如下 用户在 LoginVC 上登录 gt 通过模态 Segue 进入主选项卡栏屏幕 g
  • 环境变量不会从 .htaccess 传递到 PHP

    我正在尝试将环境变量从 htaccess 传递到 PHP 这在我的本地 WAMP 服务器上工作得很好 但在托管我的网站的服务器上 它无缘无故地失败了 这是我的测试配置 htaccess SetEnv TEST VARIABLE test v
  • 具有大状态的 erlang gen_server

    我有一个包含数千个条目的特里树 用元组和列表实现 我想支持并发读取 数据的内存占用量在 10 20 MB 范围内 特里树被构建一次 之后只读 维护状态并为客户端提供并发访问的推荐方法是什么 这是我尝试过的 1 创建一个gen server
  • 如何在 Xamarin Forms 中从 ViewModel 设置焦点

    我想要设定焦点 in a SearchBox进行一些异步操作后进行控制 我想这样做from my 视图模型 我怎样才能做到这一点 EDIT 视图模型代码 private bool searchBarFocused public bool S
  • PHP 代码不允许通过我的表单发送多个输入值

    我正在使用我构建的应用程序碰壁 我是 PHP 新手 不到 1 个月 我在导师的帮助下编写了一个非常复杂的表单 由于保密协议 我无法在此处发送完整代码作为示例 具体来说 我遇到的问题是我的表单无法将多个值发送到两个不同的输入 槽 它将向数据库
  • 是否有 GitHub 支持的 git 预告片的完整参考列表记录在某处?

    GitHub 支持一些 git 提交 预告片 尽管它没有这样称呼它们 因为instance https docs github com en pull requests committing changes to your project
  • 如何生成要展开的任务

    有人可以解释一下这两种说法之间的区别吗 Task
  • Jenkins 按标签锁定

    我想要实现的目标 I have jobA一台机器上需要 1 个执行器 I have jobB需要同一台机器上的 2 个执行器和 X 台机器上的 1 个执行器 我希望他们能够使用相同的机器 尽管不是同时 gt 他们目前使用不同的机器 他们的所
  • EF Code First 中自引用实体的映射

    在我的数据库中 我有一个表 Category 其中包含 Id CategoryName ParentCategoryId 列 其中 ParentCategoryId 对 Category Id 有约束 我首先使用实体 框架代码 其中实体如下
  • PHP mySQL - 将新记录插入到主键自动增量的表中

    想知道是否有一个速记版本可以将新记录插入到启用了主键的表中 即不必在查询中包含键列 假设键列称为 ID 其他列是 Fname Lname 和 Website query INSERT INTO myTable VALUES Fname Ln
  • Informix for .NET 的连接字符串

    我们正在使用 Informix 数据库 并使用 ODBC 从 NET 成功连接到它 我们使用的连接字符串是 DRIVER IBM INFORMIX ODBC RIVER UID username PWD password DATABASE
  • 如何为apache http客户端中的所有请求设置默认标头?

    例如 默认用户代理可以设置为 client getParams setParameter CoreProtocolPNames USER AGENT someName 但是如何设置 Accept 标头呢 HttpClient 4 3 现在允
  • Seaborn Lineplot 模块对象没有属性“Lineplot”

    使用seaborn的文档代码生成线图会返回AttributeError module 对象没有属性 lineplot 我已经更新了seaborn并重新导入了模块并再次尝试 没有运气 lineplot 退役了吗 还是有其他事情发生 impor
  • c# socket接收字节数组长度

    我正在尝试学习在 C 中使用套接字 但我有疑问 我正在使用如下代码 byte data new byte 64 int length 0 length sock Receive data more code So the byte data
  • 指定的密钥太长;最大密钥长度为 767 字节 - ASPNet Identity MySQL

    我使用 Identity 和 MySQL 创建了一个 MVC 应用程序 我已经创建了实体 但是当我创建用户表时 它失败并出现标题中指定的错误 我四处搜寻 人们都说UserName Name and Email属性太长 我已经厌倦了在这些列上
  • EOT 必须位于队列的开头吗?

    if if echo lt lt
  • Nodejs 和 Express 中的 Multer 图像上传

    几天来我一直在尝试使用 Multer 上传图像 这就是我已经走了多远 我尝试了多种方法 但似乎无法使其发挥作用 我不知道如何使用 Multer 在 createUser 函数中按如下所示的格式上传图像 我的 server js 文件 var