在nodejs中基于缓冲数据创建文件。
在nodejs中基于缓冲数据创建文件。
我从前端客户端发送了一个文件,在服务器端我有类似于这样的内容:
{ name: 'CV-FILIPECOSTA.pdf', data:, encoding: '7bit', mimetype: 'application/pdf', mv: [Function: mv] }
我需要根据那里的缓冲区创建文件,我应该如何做呢?
我已经进行了大量搜索,但没有找到任何解决方案。
这是我目前尝试的内容:
router.post('/upload', function(req, res, next) { if(!req.files) { return res.status(400).send("未上传任何文件"); } var curriculum = req.files.curriculum; console.log(curriculum); curriculum.mv('../files/' + curriculum.name, function(err) { if (err){ return res.status(500).send(err); } res.send('文件上传成功!'); }); });
问题的原因是需要将缓冲数据转换为可读格式,并使用fs模块将其存储为文件。解决方法是使用NodeJS中的Buffer和fs模块。
首先,可以使用Buffer.from方法将缓冲数据转换为字符串格式:
let buf = Buffer.from('this is a test'); let str = Buffer.from(buf).toString();
如果缓冲数据是以十六进制字符串编码的,可以在from方法中指定编码:
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); let str = buf2.toString();
然后,通过fs模块的writeFile方法将字符串内容写入文件:
fs.writeFile('myFile.txt', "the contents of the file", (err) => { if(!err) console.log('Data written'); });
需要注意的是,将字符串传递给writeFile方法时,需要确保字符串是可读的格式。可以参考fs模块的文档以更好地理解其工作原理。
关于PDF文件为空的问题,没有足够的信息来确定具体原因。可能是在转换缓冲数据为字符串时出现了问题,或者在写入文件时出现了错误。建议检查代码中的错误,并确保数据的正确转换和写入。
在React应用中,我有一个函数需要测试,这个函数期望接收一个File
对象作为参数,所以我不得不做一些变通处理。
首先,我使用了Node.js中的fs
模块中的readFileSync
方法来读取文件的内容。然后,我使用path
模块的join
方法来获取文件的绝对路径。
接下来,我创建了一个File
对象,其中的数据是通过readFileSync
方法读取到的文件内容,文件名为'file.csv'。
然而,在运行这段代码时,我遇到了一个问题。由于在React应用中,我们是在浏览器环境中运行的,而File
对象在浏览器中是内置的,不可以直接使用Node.js提供的fs
模块。
为了解决这个问题,我需要将Node.js环境中的文件内容转换为浏览器可以识别的格式。一种常用的方法是使用Blob
对象。
我可以通过创建一个Blob
对象,并将文件内容作为参数传递给Blob
的构造函数来实现。然后,我可以使用Blob
对象的slice
方法来将其转换为File
对象。
下面是修改后的代码:
import path from 'path'; const filePath = path.join(__dirname, 'some-file.csv'); const fileData = new Blob([readFileSync(filePath)], { type: 'text/csv' }); const myFile = new File([fileData], 'file.csv');
现在,我已经成功将Node.js环境中的文件内容转换为可以在浏览器中使用的File
对象,可以将其作为参数传递给我需要测试的函数了。