如何使用Mean app中的文件系统I / O上传文件?

时间:2016-10-03 09:31:44

标签: angularjs mongodb express fs

我正在使用fs在我的网络应用程序中上传文件,但控制台显示该文件已保存到我输入的所需位置但该文件未显示在那里。

代码在这里: -

var fs = require('fs-extra');
var path = require('path');

module.exports.updatePhoto = function(req,res) {
var file = req.files.file;
var userId = req.body.userId;

console.log("User "+ userId +" is submitting ", file);
var uploadDate = new Date();

var tempPath = file.path;
var targetPath = path.join(__dirname, "../../uploads/" + userId + uploadDate +file.name);
var savePath = "/uploads/" + userId + uploadDate + file.name;

fs.rename(tempPath, targetPath,function(err){
if(err) {
    console.log(err);
}
else {
   User.findById(userId, function(err, userData){
       var user = userData;
       user.image = savePath;
       user.save(function(err){
           if(err) {
               console.log("failed")
               res.json({status: 500})
           }
           else {
               console.log("saved");
               res.json({status: 200})
           }
       })
   })
}
})
};

1 个答案:

答案 0 :(得分:0)

您是否使用connect-multiparty从Express获取文件? https://github.com/expressjs/connect-multiparty

我最终将文件加载到AWS。所以我能提供的最好的代码就是代码。它基本上是免费的,我使用docker重建我的网站,这使它更灵活。

我的档案.Js:

    'use strict';

module.exports = function (app) {

  /**
   * Module dependencies.
   */
  var auth = require('../config/auth'),
    api = {},
    multiparty = require('connect-multiparty'),
    multipartyMiddleware = multiparty(),
    path = require('path'),
    uuid = require('node-uuid'),
    fs = require('fs'),
    S3FS = require('s3fs');

  var s3fsImpl = new S3FS('FOLDER_NAME_ENTER_HERE', {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
  });

  /**
   * Saves the logo file to the server
  */
  api.uploadImage = function(req, res) {
    // We are able to access req.files.file thanks to the multiparty middleware
    var folder = req.params.folder;
    var file = req.files.file;

    var filename = uuid.v4() + path.extname(file.name);
    var stream = fs.createReadStream(file.path);
    s3fsImpl.writeFile(folder + '/' + filename, stream).then(function () {
      fs.unlink(file.path, function (err) {
        if (err) {
          console.error(err);
        }
      });
      return res.status(200).json({'fileName': filename, 'url': 'https://s3-us-west-2.amazonaws.com/AWS_FOLDER_ENTER_HERE' + folder + '/' + filename});
    });
  };

  /**
   * Routes
   */
  app.route('/api/files/:folder/uploadImage')
    .post(auth.jwtCheck, multipartyMiddleware, api.uploadImage);

};