在nodejs中基于缓冲数据创建文件。

21 浏览
0 Comments

在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('文件上传成功!');
  });
});

0
0 Comments

问题的原因是需要将缓冲数据转换为可读格式,并使用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文件为空的问题,没有足够的信息来确定具体原因。可能是在转换缓冲数据为字符串时出现了问题,或者在写入文件时出现了错误。建议检查代码中的错误,并确保数据的正确转换和写入。

0
0 Comments

在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对象,可以将其作为参数传递给我需要测试的函数了。

0