【问题标题】:Access to Multer buffer object访问 Multer 缓冲区对象
【发布时间】:2016-07-26 03:14:50
【问题描述】:

我想使用上传的 'file.txt' ,使用 multer 和逐行模块。用 multer 上传文件后,我尝试检查数据,我得到了一个缓冲区对象,但我不知道如何访问数据并使用 line-by-line 模块处理它。 这是我的代码:

var express = require("express"),
fs = require('fs'),
app = express(),
bodyParser = require("body-parser"),
multer  = require('multer'),
upload = multer({ 
 dest: 'uploads/',
 inMemory:true,
 onFileUploadData: function (file, data) {
    console.log(data.length + ' of ' + file.fieldname + ' arrived')
    } 
}),
LineByLineReader = require('line-by-line'),
path = require('path'),
ejs = require("ejs"),
Excel= require("exceljs");
app.engine('html', ejs.renderFile); 
app.set('view engine', 'html');
app.use("/static", express.static("public"));
app.use(bodyParser.urlencoded({ extended: true }));

app.post("/GffData", upload.single('file'), function (req, res) {
    console.log("this is the request : ", req.file);

    fs.readFile(req.file.path, function (err, data) {
        if (err) throw err;
        // data will contain your file contents
        console.log("the data is : ",data)
        generateObjectFromGff(data); //this is the function that will use line by line module
    });

    res.send("done")
})

当我在控制台上看到数据时,我得到了一个缓冲区:

<Buffer 4c 6d 6a 46 2e 30 31 09 54 72 69 54 72 79 70 44 42 09 43 44 53 09 33 37 30 34 09 34 37 30 32 09 2e 09 2d 09 30 09 22 49 44 3d 63 64 73 5f 4c 6d 6a 46 ... >

并且逐行模块无法继续执行此操作。 你能帮我解决一下吗?

【问题讨论】:

  • line-by-line 似乎采用了路径,而不是文件流,因此如果您希望使用该特定模块,可能必须保存它。但是,您应该能够在缓冲区上调用 .toString() 并调用 .split("\n") 将其转换为字符串数组,每个元素代表一行,然后使用 .forEach() 循环遍历它。

标签: node.js express buffer multer


【解决方案1】:

如果您的data 变量是Buffer 对象,您可以通过添加空字符串轻松地将其转换为字符串:data + ''。 如果您想逐行访问您的文本,您可以将其转换为行数组:

(data + '').split('\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2021-08-29
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多