NodeJS和angular度图像上传

尝试了很多可用的互联网教程,但我仍然无法使其function。 我在NodeJS中使用multer模块,在AngularJS中使用ng-file-upload 。 我用multer设置了两个助手(因为我有两个场景,两个上传都必须到不同的文件夹)。 后端文件在APP / APP_BACK /文件夹中,所以在目标path中,我返回一个文件夹并inputAPP_FRONT / images / header。 这里是一个帮手片段(/helpers/uploadHeader.js):

var storage = multer.diskStorage({ destination: function (req, file, callback) { callback(null, '../APP_FRONT/images/header/'); }, filename: function (req, file, callback) { var ext = filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2); callback(null, file.fieldname + '-' + '.' + ext); } }); var upload = multer( {storage: storage} ); var helper = { upload: upload }; module.exports = helper; 

这里是路由器文件:

 var headerHelper= require('../helpers/uploadHeader'); router.post('/header', headerHelper.upload.single('header'), function(req, res, next) { headerHelper.upload(req, res, function(err){ if(err){ res.status(400).send(err); console.log(err); return; } res.status(200).send({ code:200, message:'Header upload successful!' }); }); }); 

“邮件头”是Postman中的input表单或键值的名称。

在Angular中,我在应用程序中注入了'ngFileUpload'模块,并将'Upload'服务注入到所需的控制器中,并在其内部的button内部的button上绑定的uploadHeader()

 $scope.uploadHeader = function (file) { Upload.upload({ url: 'http://localhost:3003/upload/header', method: 'POST', file: file }).then(function (response) { console.log('Success ' + response.config.data.file.name + 'uploaded. Response: ' + response.data); }, function (error) { console.log('Error status: ' + error.status); }, function (evt) { var progressPercentage = parseInt(100.0 * evt.loaded / evt.total); console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name); }); 

我试过邮差:

邮递员请求SS

并得到这个错误:

“错误:ENOENT:没有这样的文件或目录,打开'c:\用户\用户名\桌面\ APP \ APP_FRONT \图像\标题\ header.jpg'”

当我尝试从客户端,我得到这些错误:

错误:意外的领域
在makeError “和” TypeError:dbg未定义

我已经咨询了谷歌,尝试了一些教程,但卡住了这一点。

在你的路由器中,你告诉multer在mulitpart表单数据中寻找一个名为“header”的对象。 您的angularJS代码将其添加为名为“文件”的对象。

如果您从以下位置更改路由器中的线路:

 router.post('/header', headerHelper.upload.single(**'header'**), function(req, res, next) { //..... } 

至:

 router.post('/header', headerHelper.upload.single(**'file'**), function(req, res, next) { //.... } 

它应该做的伎俩。

编辑:find解决scheme

实际上,这是在multer的storate设置中的文件名function问题。 在上面的文章中,我添加了datetimestamp和文件扩展名到fieldname:

 filename: function (req, file, callback) { var datetimestamp = moment().format('DD-MM-YY_HH:mm:ss'); var filename = file.originalname; var ext = filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2); callback(null, file.fieldname + '-' + datetimestamp + '.' + ext); } 

出于某种原因,它不能完成上传,我得到错误。

我改变了文件名函数,只返回文件的原始名称:

 filename: function (req, file, callback) { callback(null, file.originalname); } 

现在一切正常。 但现在问题是,为什么自定义文件名不起作用?