【问题标题】:angular-file-upload to nodejs backend unable to read file contentsangular-file-upload 到 nodejs 后端无法读取文件内容
【发布时间】:2016-11-23 04:31:22
【问题描述】:

我正在使用以前使用 Laravel Lumen 作为后端的 Angular 文件上传,但我已经移至 Node 并且无法返回上传的文件内容。

前端角度

$scope.upload = Upload.upload({
    url: ENV.apiEndpoint + '/upload',
    method: 'POST',
    data: {
        fname: $scope.fname
    },
    file: file
}).progress(function(evt) {

}).success(function(data, status, headers, config) {
});

后端节点

上传/index.js

'use strict';

var express = require('express');
var controller = require('./upload.controller');

var router = express.Router();
var multer = require('multer');

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

var upload = multer({ storage: storage });


router.post('/', upload.single('file'), controller.index);

module.exports = router;

上传/upload.controller.js

'use strict';

var _ = require('lodash');
var db = require('../../db');
var https = require('https');
var Q = require('q');
var fs = require('fs');
var multer = require('multer');

exports.index = function(req, res, next) {
    console.log(req.files.file);
    res.status(204).end();
};

旧 Laravel 流明请求

public function data(Request $request) {

    $path_parts = pathinfo($_FILES["file"]["name"]);
    $extension = $path_parts['extension'];
    $contents = file_get_contents( $_FILES['file']['tmp_name'] );
    return response()->json(['type'=> $extension, 'content'=> $contents]);
}

我要做的只是上传一个文件,但只将文件的内容再次返回到前端我不希望文件被存储。

【问题讨论】:

  • req.file 而不是 req.files

标签: javascript angularjs node.js ng-file-upload


【解决方案1】:

这里有一个例子,你有几个地方错了。看看吧

 var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'public/images/banks')
  },
  filename: function (req, file, cb) {
    crypto.pseudoRandomBytes(16, function (err, raw) {
      cb(null, raw.toString('hex') + path.extname(file.originalname));
    });
  }
});
var upload = multer({storage: storage});

router.post('/uploadImage', upload.single('file'), function (req, res, next) {
  if(!req.file) {
    res.status(400);
    res.send({error: 'No se pudo subir el archivo'});
  }

  res.send({filename: req.file.filename});
});

【讨论】:

  • 这实际上给了我Undefined 当返回req.file 和状态TypeError: Cannot read property 'filename' of undefined
  • 那你没有从前面正确上传文件。
  • 在你的前端函数中,你有一个未定义的变量:file:file。该文件没有在任何地方定义,至少在您放置的代码中没有看到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2020-01-15
  • 2021-12-26
  • 1970-01-01
  • 2017-10-20
相关资源
最近更新 更多