当前位置: 首页 > 面试题库 >

在Mongoose中使用Multer将文件存储到MongoDB中

诸葛雨泽
2023-03-14
问题内容

到目前为止,我已经接受了HTML格式的文件,并通过$http.post使用ng-file- upload模块以angular的形式发布了文件。现在,我想在Mongoose中接受此文件,并将其存储到MongoLab上托管的NoSQL
MongoDB中。我已经阅读了有关此模块的信息,Multer并遵循了基本文档,但到目前为止,只有我自己。在解释问题的开始之前,让我发布我的代码:

我的HTML表单

<form name="upForm">
   <fieldset>
      <legend>Upload files here</legend>
         <label>Insert File Here:</label>
         <input type="file" ngf-select ng-model="exFile" name="file" ngf-accept="'.cs'" required>
         <i ng-show="upForm.file.$error.required">*required</i>
         <div class="alert" ng-show="file.$error === 'pattern'">
              file type is not accepted
         </div>
         <br />
         <button ng-disabled="!upForm.$valid" ng-click="uploadExercise(exFile)" class="btn btn-default">Submit</button>
         <span class="progress" ng-show="picFile.progress >= 0">
         <div style="width:{{exFile.progress}}%" ng-bind="picFile.progress + '%'"></div>
         </span>
         <span ng-show="picFile.result">Upload Successful</span>
    </fieldset>
</form>

我的角度代码:

 $scope.uploadExercise = function (file) {

    console.log(file);
    var fd = new FormData();
    fd.append('file', file);
    $http.post(url+"/Upload", fd,{
        transformRequest: angular.identity,
        header:{'Content-Type': undefined},
        enctype:'multipart/form-data'
    }).success(function () { }).error(function () { });
    console.log(fd);
};

控制台日志返回正确的文件对象。

迄今为止的猫鼬:

var mongoose = require("mongoose");
var express = require("express");
var multer = require('multer');
var upload = multer({ dest: 'Uploads/' });
var bodyparser = require("body-parser");
var app = express();


mongoose.connect("connection-string");
app.use(bodyparser.json());

app.post('/Upload', upload.single('solution') ,function (req, res, next) {
    console.log(req.file);
});

console.log将保持返回未定义状态。因此,某处发生了严重错误。请帮帮我!我想在Mongoose中接收此文件并将其存储到MongoDB中,我以前从未做过,而且似乎找不到Multer的任何体面的文档或存储与我的情况相关的文件的体面的解释。我究竟做错了什么?我应该怎么做呢?


问题答案:

伙计,您在错误的路径上运行。我已经在您的上一个问题请求中说明了Multer用于将文件保存在文件磁盘系统中,而不是直接保存到数据库中。为此,您必须使用GRIDFS。

来到您当前的问题。

app.post('/Upload', upload.single('solution') ,function (req, res, next) {
    console.log(req.file);
});

在这里,upload.single('solution')-调用函数Upload,传递的文件名是解决方案,但显然它在这里不可用。

使用这种格式-Multer的文档

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage })

那里的存储部分用于提供必须保存文件的路径,文件名部分用于更改您想要的文件名。

请阅读文档,因为这会有所帮助。当我们使用第三方模块时,我们必须确认他们已经提供的信息,以便我们可以轻松地使用他们的工作。

去检查那个线程。我提出了这个问题-问题是我正在以数组格式发送文件,就像一次发送多个文件一样。如果您不这样做,则只需更改ng-file-upload段以使用单个上载演示示例,并在服务器端将nodejs代码替换.array.single,那么事情就可以按照您希望它们工作的方式进行-假设您要使用文件磁盘系统存储文件。

我重复说这种方法不会帮助您直接将文件保存在mongodb中。

让我知道您是否需要进一步说明。



 类似资料:
  • 问题内容: 目前,我使用angular-file- upload处理图像上传,我只是将图像保存到服务器的文件系统中,并在HTML中引用它。但是,我想尝试将图像直接存储在为博客文章定义的架构内的数据库中。 我要这样做,这样我就可以拥有一个存储图像本身的字段。我当时想我可以像以前一样上传图像,但是在上传图像之后将其转换并以二进制(或其他形式)存储在Mongo中。这可能吗? 谢谢! 问题答案: 下面的示

  • 问题内容: noob Golang和Sinatra人在这里。我入侵了Sinatra应用程序,以接受从HTML表单发布的上传文件,并通过GridFS将其保存到托管的MongoDB数据库中。这似乎工作正常。我正在使用mgo驱动程序在Golang中编写相同的应用程序。 从功能上来说,它工作正常。但是在Golang代码中,我将文件读入内存,然后使用mgo将文件从内存写入MongoDB。这似乎比我同等的Si

  • 我是Hadoop的新手,需要将Hadoop数据存储到MongoDB中。在这里,我使用Pig将Hadoop中的数据存储到MongoDB中。 在给定命令的帮助下,我在Pig Grunt shell中下载并注册了以下驱动程序, 在此之后,我使用以下命令成功地从MongoDB获取了数据。 然后,我尝试使用以下命令将数据从pig bag插入MongoDB,并获得成功。 然后我尝试使用下面的命令Mongo更新

  • 我的mongoDB中有这种数据 这里假设我做一个查询 这给了我她的结果,但我有名字“nna”或名字“Ana”或名字“anna”或任何其他组合。那么,如何使用Mongoose获取MongoDB中字符串的最接近值呢

  • 问题内容: 设法将我的文件存储在一个文件夹中,但是没有文件扩展名。 有谁知道我将如何存储带有文件扩展名的文件? 问题答案: 从文档中:“ Multer不会为您添加任何文件扩展名,您的函数应返回带有文件扩展名的文件名。” 添加扩展名的方法如下: 我建议使用该属性来确定扩展名。例如: 更多信息:https://github.com/expressjs/multer

  • 本文向大家介绍Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB,包括了Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB的使用技巧和注意事项,需要的朋友参考一下 示例 设定 首先,使用以下命令安装必要的软件包: 代码 然后,将依赖项添加到server.js文件中,创建数据库模式和集合名称,创建Express.js服务器,