2017-07-06 32 views
0

Multer中的文件名问题

我使用express.js和multer将图像上传到服务器。我的行为是这样的:重命名上传的文件nodejs和multer

var storage = multer.diskStorage({ 
     destination: function (req, file, callback) { 
      callback(null, "../client/member/upload"); 
     }, 
     filename: function (req, file, callback) { 
      console.log('1', 1); 
      callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname); 
     } 
    }); 
    var upload = multer({ storage : storage}).single('userPhoto'); 

但问题是,从来没有文件名称的变化。 我的上传处理程序:

function memberUpload(request, response) { 

    var storage = multer.diskStorage({ 
     destination: function (req, file, callback) { 
      callback(null, "../client/member/upload"); 
     }, 
     filename: function (req, file, callback) { 
      console.log('1', 1); 
      callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname); 
     } 
    }); 
    var upload = multer({ storage : storage}).single('userPhoto'); 

    var folderName = path.join(__dirname, '../', 'client/member/upload'); 

    if (!fs.existsSync(folderName)) { 
     fs.mkdir(folderName, function (err) { 
      if (err) { 
       return response.status(500).send(err); 
      } 
      else { 
       upload(request, response, function (err) { 
        if (err) { 
         return response.status(400) 
          .send('No files were uploaded.'); 
        } 
        var sentFile = request.files.file, 
         fileName = (request.files.file && request.files.file.name) ? request.files.file.name : 'test'; 

        sentFile.mv(path.join(__dirname, '../', 'client/member/upload/', fileName), function (err) { 
         mime.lookup(path.join(__dirname, '../', 'client/member/upload/', fileName));   // => 'text/plain' 
         if (err) { 
          return response.status(500) 
           .send(err); 
         } 
         response.send({'location': '../member/upload/' + fileName}); 
        }); 
       }); 
      } 
     }); 
    } 
    else { 
     upload(request, response, function (err) { 
      if (err) { 
       return response.status(400) 
        .send('No files were uploaded.'); 
      } 
      var sentFile = request.files.file, 
       fileName = (request.files.file && request.files.file.name) ? request.files.file.name : 'test'; 

      sentFile.mv(path.join(__dirname, '../', 'client/member/upload/', fileName), function (err) { 
       mime.lookup(path.join(__dirname, '../', 'client/member/upload/', fileName));   // => 'text/plain' 
       if (err) { 
        return response.status(500) 
         .send(err); 
       } 
       response.send({'location': '../member/upload/' + fileName}); 
      }); 
     }); 
    } 
} 

将文件保存到正确的目录名称为“blobid0.jpeg”,“blobid1.png”等等... 什么是我的错?

+0

输出目的是:'''{文件: {名称: 'blobid0.jpg', 数据:<缓冲FF FF D8 E0 00 10 4A 46 49 46 00 01 02 01 00 48 00 48 00 00 ff ed 01 b8 50 68 6f 74 6f 73 68 6f 70 20 33 2e 30 00 38 42 49 4d 03 e9 00 00 00 00 00 78 ...>, 编码:'7bit', mimetype:'image/jpeg ', mv:[Function:mv]}}''' –

回答

0

这里是我上传任何文件(pdf,txt,png)到server.Hope的代码,这将帮助你。

exports.saveMedia = ((req, res) => { 
     const storage = multer.diskStorage({ 
      destination: (req, file, callback) => { 
       callback(null, (config.const.path.base + config.const.path.productReviewMedia)); 
      }, 
      filename: (req, file, callback) => { 
       callback(null, Date.now() + '-' + file.originalname); 

      } 
     }); 

     const upload = multer({storage: storage}).any('file'); 

     upload(req, res, (err) => { 
      if (err) { 
       return res.status(400).send({ 
        message: helper.getErrorMessage(err) 
       }); 
      } 
      let results = req.files.map((file) => { 
       return { 
        mediaName: file.filename, 
        origMediaName: file.originalname, 
        mediaSource: 'http://' + req.headers.host + config.const.path.productReviewMedia + file.filename 
       } 
      }); 
      res.status(200).json(results); 
     }); 
    });