Tag: multer

如何使用文件和数据在Node Express中发送响应

module.exports.validateUser = function (req, res) { User.find({ 'username': req.body.username, 'password': req.body.password }, function (err, result) { if (result.length) { var gridfs = req.app.get('gridfs'); var readstream = gridfs.createReadStream({ _id: result[0]._doc.picture }); req.on('error', function (err) { res.send(500, err); }); readstream.on('error', function (err) { res.send(500, err); }); // Just sends the file //readstream.pipe(res); res.send('This is incedible'); } else […]

使用multer,ng-file-upload,angular和node将dynamic表单数据绑定到每个file upload多个文件

我在客户端使用angular和ng-file-upload。 我在服务器端使用节点,expression式和multer。 当用户select多个文件时,我会显示文件的预览以及绑定到模型的textarea。 文本区域的这个目的是为用户提供给每个上传的文件一个笔记/描述的能力。 当我调用ng-file-upload的上传函数并传入文件的模型时,我看到每个文件特有的dynamic表单数据存在于正在上传的数组中。 在服务器端我使用的是Muller。 一切似乎function正常。 我可以上传多个文件,但是dynamic表单数据在multer内置的req.files对象上不可用,我不知道在哪里可以访问dynamic数据。 我search了请求对象,找不到我正在查找的数据。 如何将dynamic数据分别添加到每个文件并将其传递给服务器并访问? 客户 $scope.uploadFiles = function(files) { console.log('files', files); //I see that this argument contains the user input as property 'Desc' if (files && files.length) { Upload.upload({ url: 'api/filesinorg/upload/'+ $rootScope.currentUser.primary_org_id, arrayKey: '', // default is '[i]' data: { files: files, fileData: { Organization_id: $rootScope.currentUser.primary_org_id, uploadBy_id: $rootScope.currentUser._id } […]

multer数组上传不上传文件,得到一个空数组

想要上传一个3个文件的数组,但是在我的nodejs中,我只能从angular度控制器获得一个空的数组。 在我的angular度控制器中,我使用一个onchange方法从html中获取文件,并通过http请求将其发送到我的nodejs后端的上传函数中。 this.selectFile1 = function(files){ fileArray[0] = files[0]; self.files = files; } this.selectFile2 = function(files){ fileArray[1] = files[0]; self.files = files; } this.selectFile3 = function(files){ fileArray[2]= files[0]; self.files = files; } this.upload = function(){ var fd = new FormData(); var file = fileArray; fd.append('file', file); $http.post("/upload", fd, { transformRequest: angular.identity, headers: {"Content-Type": undefined} }).then(function success(response){ […]

将内存中的文件从Node Express发送到API

我在Node和Express中有一个API,它接收来自客户端的一个文件(Postman正在开发中),我使用multer来获取内存中的文件,如下所示: router.post('/api/v1/upload', contrl.upload, contrl.uploadFile); 然后在我的控制器中: exports upload = multer({ storage: multer.memoryStorage() }).single('file'); 现在我可以用req.file.buffer访问文件,但是我想把这个文件发送到另一个API。 我正在使用request-promise-native所以这将是这样的: const rp = require('request-promise-native') exports.uploadFile = (req, res) => { const options = { method: 'POST', uri: `${uri}`, form: { file: req.file.buffer } } rp(options) .then(parsedBody => { return res.status(201).send(parsedBody); }) .catch(err => res.status(400).send(err)); } 为了简单起见,我删除了一些其他参数,但这不起作用,可能是因为Node不知道如何处理req.file.buffer中的信息。 编辑。 好的,经过一些testing,我试图使这个工作与一个真正的文件,而不是使用multer memoryStorage。 所以我得到这个: exports […]

着名的TypeError:无法读取属性未定义的属性“path”

我有一个问题将上传一个docx文件与Muller。 我所宣称的: app.js multerconfiguration var storage = multer.diskStorage({ destination: function(req, file, callback) { callback(null, __dirname + process.env.UPLOAD_DIR); // '/uploads' } }); var uploadService = multer({ storage: storage, // limits: { fileSize: maxSize }, fileFilter: function(req, file, callback) { var ext = path.extname(file.originalname) if (ext !== '.docx') { return callback(res.end('Only docx are allowed'), null) } callback(null, […]

决定Multer中间件的上传文件夹位置

所有: 我是Express.js的新手,当我用Multer( https://github.com/expressjs/multer )处理file upload时,我指定了一个multer中间件对象: var upload = multer({dest: 'uploads/'}); 但有一点让我困惑的是:无论我在哪里把这行代码(无论是在子路由器文件,或app.js),它总是创build“上传”文件夹项目根目录下(app.js,视图,路由,公共…位置),即使我将其更改为“./uploads/”,它仍然会在项目根目录下创build上传文件夹。 这让我很困惑,因为当我将它与require()函数进行比较时,似乎require()使用的相对path是基于调用它的位置而multer不是? 我想知道我的理解是否正确? 如果我的正确,如何将其更改为相对? 谢谢

使用express / multer时更改文件名

我上传PDF时遇到了麻烦,当我上传(我使用ng-file-upload )的文件json达到express.js是: { fieldname: 'file', originalname: 'db.pdf', encoding: '7bit', mimetype: 'application/pdf', destination: './client/public/docs/transactions/', filename: '8a3fe7cb7369d9cffa8e17b162ec3d6b', path: 'client\\public\\docs\\transactions\\8a3fe7cb7369d9cffa8e17b162ec3d6b', size: 9179145 } 我想将名称更改为从angular度发送的属性,以下是所有设置: html元素: <div ngf-select="vm.uploadPdf($file, $errFiles)" ngf-pattern="'.pdf'" accept="application/pdf" ngf-max-size="20MB">Select … </div> angular func uploadPdf (ctrl为vm): function uploadPdf( file, errFiles ) { vm.pdf = file; vm.errorFile = errFiles && errFiles[ 0 ]; if ( vm.pdf ) { […]

节点JS)未定义的图片上传问题

var http = require('http'); var express = require('express'); var request = require('request'); var mysql = require('mysql'); var bodyParser = require('body-parser'); var fs = require('fs'); var multer = require('multer'); var app = express(); app.use(bodyParser.json()); app.use(express.bodyParser()); app.use(app.router); app.use(multer( {dest:'./uploads/', onFileUploadStart : function(file){ console.log('File recieved:'); console.log(file); }, onFileUploadData:function (file,data){ console.log('Data recieved'); }, onParseEnd: function(req,next){ next(); } })); app.use(express.static(__dirname+"/public")); […]

Multer:在目的地属性中设置不同的目的地

我有一个情况,我需要将图像存储在不同的目录中。 所以我把这个设置成了。 app.use(multer({ dest: path.join(__dirname, '`public/assets/img/profile`'), rename: function (fieldname, filename, req, res) { if(req.session.user) return req.session.user.id; else if(req.session.doctor) return req.session.doctor.id; } })); 不过,我需要更多的目的地来存储图像。 public/assets/img/picture1 我曾经见过类似的问题,但我不明白其中的任何一个。 任何帮助将是伟大的。

在node.js中获取从post发送的图像

我需要使用python发送图像,然后将其下载到node.js服务器端。 Python代码: import requests from PIL import Image import json url = 'http://127.0.0.1:8080/ay' files = {'file': open('image.jpg', 'rb')} r = requests.post(url, data = files) Node.js代码: var app = express(); app.use(bodyparser.json({ limit: '50mb' })); app.use(bodyparser.urlencoded({ limit: '50mb', extended: true })); app.post('/ay', function(req, res) { var base64Data = req.body.file require("fs").writeFile("out.png", base64Data, 'base64', function(err) { console.log(err); }); res.send('done'); […]