MEAN 堆栈文件上传

2024-06-22

我最近开始使用 MEAN Stack 进行编程,目前正在实现某种社交网络。一直使用 MEAN.io 框架来做到这一点。 我现在的主要问题是让文件上传正常工作,因为我想做的是将文件从表单接收到 AngularJS 控制器中,并将其与更多信息一起传递给 ExpressJS,这样我最终可以将所有内容发送到 MongoDB。 (我正在构建一个注册新用户表单)。

我不想将文件本身存储在数据库中,但我想存储指向它的链接。

我已经用不同的搜索查询在谷歌上搜索了几十个页面,但我找不到任何我能理解或工作的内容。搜索了几个小时没有结果。这就是我来这里的原因。

谁能帮我这个?

谢谢 :)

编辑:也许一些代码有助于理解。

我用作基础的默认 MEAN.io Users Angular 控制器具有以下内容:

$scope.register = function(){
        $scope.usernameError = null;
        $scope.registerError = null;
        $http.post('/register', {
            email: $scope.user.email,
            password: $scope.user.password,
            confirmPassword: $scope.user.confirmPassword,
            username: $scope.user.username,
            name: $scope.user.fullname
        })//... has a bit more code but I cut it because the post is the main thing here.
    };

我想做的是: 从表单接收文件到此控制器上,并将其与电子邮件、密码、姓名等一起传递,并能够在位于服务器端的expressjs上使用json。 '/register' 是一个 Nodejs 路由,因此是一个创建用户(使用用户模式)并将其发送到 MongoDB 的服务器控制器。


我最近做了这样的事情。我用了角度文件上传 https://github.com/danialfarid/angular-file-upload。你也会想要节点多方 https://github.com/andrewrk/node-multiparty让您的端点解析表单数据。然后你可以使用s3 https://github.com/andrewrk/node-s3-client用于将文件上传到 s3。

这是我的一些[编辑]代码。

角度模板

<button>
  Upload <input type="file" ng-file-select="onFileSelect($files)">
</button>

角度控制器

$scope.onFileSelect = function(image) {
  $scope.uploadInProgress = true;
  $scope.uploadProgress = 0;

  if (angular.isArray(image)) {
    image = image[0];
  }

  $scope.upload = $upload.upload({
    url: '/api/v1/upload/image',
    method: 'POST',
    data: {
      type: 'profile'
    },
    file: image
  }).progress(function(event) {
    $scope.uploadProgress = Math.floor(event.loaded / event.total);
    $scope.$apply();
  }).success(function(data, status, headers, config) {
    AlertService.success('Photo uploaded!');
  }).error(function(err) {
    $scope.uploadInProgress = false;
    AlertService.error('Error uploading file: ' + err.message || err);
  });
};

Route

var uuid = require('uuid'); // https://github.com/defunctzombie/node-uuid
var multiparty = require('multiparty'); // https://github.com/andrewrk/node-multiparty
var s3 = require('s3'); // https://github.com/andrewrk/node-s3-client

var s3Client = s3.createClient({
  key: '<your_key>',
  secret: '<your_secret>',
  bucket: '<your_bucket>'
});

module.exports = function(app) {
  app.post('/api/v1/upload/image', function(req, res) {
    var form = new multiparty.Form();
    form.parse(req, function(err, fields, files) {
      var file = files.file[0];
      var contentType = file.headers['content-type'];
      var extension = file.path.substring(file.path.lastIndexOf('.'));
      var destPath = '/' + user.id + '/profile' + '/' + uuid.v4() + extension;

      var headers = {
        'x-amz-acl': 'public-read',
        'Content-Length': file.size,
        'Content-Type': contentType
      };
      var uploader = s3Client.upload(file.path, destPath, headers);

      uploader.on('error', function(err) {
        //TODO handle this
      });

      uploader.on('end', function(url) {
        //TODO do something with the url
        console.log('file opened:', url);
      });
    });
  });
}

我从我的代码中更改了它,因此它可能无法开箱即用,但希望它有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MEAN 堆栈文件上传 的相关文章

  • Knex 与 PostgreSQL 选择查询在多个并行请求上性能极度下降

    In brief 我正在开发一个 梦想中的 游戏 我的后端堆栈是 Node js 和带有 Knex 的 PostgreSQL 9 6 我在这里保存所有玩家数据 我需要经常请求它 其中一个请求需要进行 10 个简单的选择来提取数据 这就是问题
  • 本地主机上的连接被拒绝

    我正在学校尝试使用我的 NodeJS 和 ReactJS 应用程序 但每次运行服务器时 都会出现错误localhost PORT net ERR CONNECTION REFUSED wifi 是否拒绝本地主机上的连接 PS 反应端渲染正确
  • ui-router 不渲染视图

    我最近拆分了一个 Rails 应用程序 并使用 yeoman 将前端创建为一个单独的应用程序 由于某种原因 我的视图不再呈现 例如我的应用程序定义 use strict var actionTrackApp angular module a
  • Mongoose 填充与对象嵌套

    使用之间是否有任何性能差异 查询的处理时间 猫鼬种群 http mongoosejs com docs populate html和直接对象包含 每种应该什么时候使用 猫鼬种群示例 var personSchema Schema id Nu
  • 如何在 Windows 上设置 Node.js 的工作目录?

    我刚刚安装了 Windows 版的 Node js 运行它真的是轻而易举 我想将它用作构建过程的一部分 将多个文件组合在一起 如下所示 settings var FILE ENCODING utf 8 EOL n DIST FILE PAT
  • ng-grid cellTemplate 不适用于包含的 CUSTOM_FILTERS

    当在列定义中包含 cellTemplate 时 如果该 cellTemplate 包含 CUSTOM FILTERS 则会导致 Angular 呕吐 错误 语法错误 标记 CUSTOM FILTERS 是从 CUSTOM FILTERS 开
  • Express + EJS - 将参数传递给 EJS 视图

    我对 Node js Express EJS 相当陌生 我最近注意到 当我将参数从 Express 请求处理程序传递到 EJS 视图并省略参数名称时 它会根据变量名称创建一个名称 例如 在下面的代码中 server js var expre
  • 如何将缓冲区包装为stream2可读流?

    如何使用stream2接口将node js缓冲区转换为可读流 我已经找到了这个answer https stackoverflow com questions 13230487 converting a buffer into a read
  • AngularJS 与 Apache Tiles

    我在我的项目中使用 Spring MVC 和 AngularJS AngularJs 可以吗 routing和 ngView 被用来代替or与阿帕奇瓷砖框架 据我所知 使用 routing 和 ngView 我们创建模板并在单页应用程序中重
  • 如何在没有到期时间的情况下使 JWT 令牌失效

    正在使用 JWT 创建一个 Node js 后端应用程序 对我来说 要求很简单 授权令牌不应该有任何到期时间 但是当用户更改密码时 我在使 JWT 失效期间遇到问题 当用户更改密码时 我将创建一个新的 JWT 令牌 并删除旧的令牌 但用户仍
  • 使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错

    我正在关注 tumbleblog 应用程序here http docs mongodb org ecosystem tutorial write a tumblelog application with flask mongoengine
  • 如何使用匹配、排序和限制对 MongoDB 聚合进行排序

    我当前的聚合是 db group members aggregate match user id in 1 2 3 group id group id sort last post at 1 limit 5 对于以下文档结构 id user
  • $rootScope.$broadcast 不工作

    我正在尝试让 rootScope broadcast 刷新我的视图 服务是 var app angular module productsApp service serviceProvider function http this getD
  • 无法使用IP地址访问WebStorm内部服务器

    我在 PC 上安装了 WebStorm 并启动了 NodeJS 服务器 我可以使用 Chrome 和 Firefox 浏览器访问它localhost但不是我电脑的 IP 地址 我按照给出的指示进行操作here https intellij
  • Heroku 上的 Node.js 提供的静态文件 - 这是一个好主意吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 Backbone 支持的单页应用程序 应用程序由几个文件组成 index html javascr
  • 使用 mongoDB 插入子文档

    我收集了以下文件 id 2 workspace name 1 widgets name 2 widgets name 3 widgets name 4 widgets 我怎样才能插入 id 1 blabla blabla 在 小部件 中的
  • 如果数据库关闭一段时间,MongoDB 会更改流超时

    我在nodejs中使用mongoDB更改流 一切正常 但如果数据库关闭需要超过10 5秒才能启动更改流会引发超时错误 这是我的更改流观察程序代码 Service prototype watcher function db let colle
  • 脚本不会从nodejs应用程序中的ejs文件运行

    我正在尝试使用nodejs express mysql和ejs让网页显示图表 但我显然不明白ejs javascript等是如何工作的 我需要运行一个脚本来设置图表 来自 Chart js 模块 但它不会输出任何类型的图表 我尝试过的 将
  • express 和 socket.io - 声明和启动服务器

    我一直不明白下面的代码是如何等效的 Code 1 var app require express var server require http Server app var io require socket io listen serv
  • AngularJS 的 HEAD 与 BODY

    在所有 AngularJS 示例中 Angular 库都放置在文档的 HEAD 标签中 我有一个基于 HTML5 Boilerplate 布局构建的现有项目 这定义了 JS 库应该放置在 DOM 的最底部 在 tag AngularJS需要

随机推荐