javascript - Node fs (文件流) 上传单个文件时创建 2 个文件

标签 javascript node.js fs

我使用以下代码允许人们将图像上传到服务器:

app.post("/api/upload", function (req, res) {

  fs.readFile(req.files[0].path, function (err, data) {
    console.log('The data for the file..', data);

    if (err) {
      res.send(err).end();
    } else {
      // ...
      var newPath = __dirname + "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname;
      fs.writeFile(newPath, data, function (err) {
        console.log('File Written');
        if (err) {
          res.send(err).end();
        } else {  
          res.send({
            success: true,
            file: newPath,
            files: req.files
          }).end();
        }
        //res.end({"success": true})
      });
    }
  });


});

问题是,对于上传的每个文件,我还得到了一个 arrayBuffer 版本(我认为),请参见图片:

enter image description here

我怎样才能防止这种情况发生,最重要的是,为什么会发生这种情况? 谢谢!

最佳答案

工作的时候,我得到了一个使用 multer 模块的解决方案。使用这个模块,您可以上传文件和图像。并且它成功上传到目标文件夹。

这是我的服务器代码app.js

var express =r equire('express');
var multer = require('multer');
var path = require('path')
var app = express();
var ejs = require('ejs')
app.set('view engine', 'ejs')
var storage = multer.diskStorage({
    destination: function(req, file, callback) {
        callback(null, './public/uploads')//here you can place your destination path
    },
    filename: function(req, file, callback) {
        callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
    }
})

app.get('/api/file',function(req,res){
res.render('index');
});
app.post('/api/file', function(req, res) {
    var upload = multer({
        storage: storage}).single('userFile');
    upload(req, res, function(err) {
        console.log("File uploaded");
        res.end('File is uploaded')
    })
})

app.listen(3000,function(){
console.log("working on port 3000");
});

创建一个 views 文件夹并将此 index.ejs 文件放入其中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form id="uploadForm" enctype="multipart/form-data" method="post">
        <input type="file" name="userFile" />
        <input type="submit" value="Upload File" name="submit">
    </form>
</body>
</html>

之后,将服务器作为 node app.js 运行。运行此网址后,打开浏览器并输入 http://localhost:3000/api/file 选择一个您要上传到目标文件夹的文件。并在终端和浏览器中均获得成功响应。希望这对您有所帮助。

关于javascript - Node fs (文件流) 上传单个文件时创建 2 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45748529/

相关文章:

javascript - 为什么我的页面在提交帖子后没有重定向?

javascript - Node.js/Express 错误 : cannot GET/

node.js - 用于 Raspberry Pi ARM 的 Mongodb MongoClient.connect() 上的总线错误

node.js - 文件大小 (6003804160) 大于可能的缓冲区 : 2147483647 in node

webpack - Vue.js 网页包 : how to get the list of files in a directory?

javascript - 如何在没有 ajax 调用或服务器端语言的情况下包含 HTML/文本文件

javascript - 脚本中相减后的结果不同

javascript - 如何调整 Canvas 大小

node.js - 如何从 node.js REPL 启动 vi 或 emacs 等编辑器?

node.js - 如何修复找不到模块 'fs'