Javascript 如何从缓冲区提取文件内容?

Javascript 如何从缓冲区提取文件内容?,javascript,node.js,fs,multer,Javascript,Node.js,Fs,Multer,我只是在探索Node.js,在创建使用multermodule将小文件上传到内存的功能时遇到了一个问题 我正在为multer使用内置的MemoryStorage选项。文件已成功上载,文件元数据可在ExpressJS的req对象中访问 现在我希望能够从缓冲区读取文件内容,因为该文件将采用.csv格式,稍后将转换为JSON。我需要文件的字符串内容来执行转换 这是我的路由器处理程序: const memStorage = multer.memoryStorage(); const memUpload

我只是在探索Node.js,在创建使用
multer
module将小文件上传到内存的功能时遇到了一个问题

我正在为
multer
使用内置的
MemoryStorage
选项。文件已成功上载,文件元数据可在
ExpressJS
req
对象中访问

现在我希望能够从缓冲区读取文件内容,因为该文件将采用.csv格式,稍后将转换为JSON。我需要文件的字符串内容来执行转换

这是我的路由器处理程序:

const memStorage = multer.memoryStorage();
const memUpload = multer({
  storage: memStorage,
  limits: { fileSize: 30 * 1024 * 2014, files: 1 }
});
router.post(
  '/tables/csv',
  memUpload.single('file'),
  (req, res) => {
    const file = req.file;
    let buffer = fs.readFileSync(file.buffer);
    console.log(buffer);
  }
);
使用的.csv文件:

Risk Category,Risk ID,Risk Value
Some,Some,Some
Some,Some,Some
Some,Some,Some
控制台输出:

Error: ENOENT: no such file or directory, open 'Risk Category,Risk ID,Risk Value
Some,Some,Some
Some,Some,Some
Some,Some,Some'
    at Object.openSync (fs.js:436:3)
    at Object.readFileSync (fs.js:341:35)
    at router.post (C:\client_projects\tt\sarcs-hotline\router\index.js:1039:21)
    at Layer.handle [as handle_request] (C:\client_projects\tt\sarcs-hotline\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\client_projects\tt\sarcs-hotline\node_modules\express\lib\router\route.js:137:13)
    at Array.<anonymous> (C:\client_projects\tt\sarcs-hotline\node_modules\multer\lib\make-middleware.js:53:37)
    at listener (C:\client_projects\tt\sarcs-hotline\node_modules\on-finished\index.js:169:15)
    at onFinish (C:\client_projects\tt\sarcs-hotline\node_modules\on-finished\index.js:100:5)
    at callback (C:\client_projects\tt\sarcs-hotline\node_modules\ee-first\index.js:55:10)
    at IncomingMessage.onevent (C:\client_projects\tt\sarcs-hotline\node_modules\ee-first\index.js:93:5)
    at IncomingMessage.emit (events.js:182:13)
    at endReadableNT (_stream_readable.js:1094:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)
错误:enoint:没有此类文件或目录,打开“风险类别、风险ID、风险值”
一些,一些,一些
一些,一些,一些
一些,一些,一些
在Object.openSync(fs.js:436:3)
在Object.readFileSync(fs.js:341:35)
在router.post(C:\client\u projects\tt\sarcs热线\router\index.js:1039:21)
在Layer.handle[作为handle\u请求](C:\client\u projects\tt\sarcs hotell\node\u modules\express\lib\router\Layer.js:95:5)
下一步(C:\client\u projects\tt\sarcs热线\node\u modules\express\lib\router\route.js:137:13)
在阵列上。(C:\client\u projects\tt\sarcs热线\node\u modules\multer\lib\make middleware.js:53:37)
在侦听器上(C:\client\u projects\tt\sarcs热线\node\u modules\on finished\index.js:169:15)
在onFinish(C:\client\u projects\tt\sarcs热线\node\u modules\on finished\index.js:100:5)
在回调时(C:\client\u projects\tt\sarcs热线\node\u modules\ee first\index.js:55:10)
在IncomingMessage.onevent(C:\client\u projects\tt\sarcs hotell\node\u modules\ee first\index.js:93:5)
在IncomingMessage.emit(events.js:182:13)
在endReadableNT(_stream_readable.js:1094:12)
在进程中。_tick回调(内部/process/next_tick.js:63:19)

您可以在调用
fs.readFileSync
获取字符串时指定编码:

fs.readFileSync(file.buffer, { encoding: 'utf8' });
或者,您不需要
readFileSync
。您只需调用
buffer.toString(编码)
like

file.buffer.toString('utf8');

调用
fs.readFileSync
获取字符串时,可以指定编码:

fs.readFileSync(file.buffer, { encoding: 'utf8' });
或者,您不需要
readFileSync
。您只需调用
buffer.toString(编码)
like

file.buffer.toString('utf8');