Multer MemoryStorage缓冲区有时不起作用

时间:2016-01-04 15:47:01

标签: node.js multer

作为一个简单的测试,我尝试上传带有内存存储的文件并将缓冲区保存在变量中。然后使用另一个路径检索文件。 像这样:

var multer  = require('multer');
var storage = multer.memoryStorage();
var upload = multer({
  storage: storage
});
var fileBuffer = null;
var fileName = null;
var fileBase64 = null;
router.post('/attachment', upload.any(), function (req, res, next) {
  fileBuffer = req.files[0].buffer;
  fileName = req.files[0].originalname;
  fileBase64 = fileBuffer.toString('base64');
  return res.send({ok: true});
});
router.get('/file', function (req, res, next) {
  res.type(fileName); //for setting mime type
  //return res.end(fileBase64, 'base64');
  return res.end(fileBuffer);
});

问题在于它始终适用于某些文件而不适用于其他文件。

它适用于某些png文件而不适用于其他文件,它不适用于pdf(页数一致,但所有页面都是空的),它适用于某些.doc和zip文件。

如果我直接使用缓冲区(如显示的代码中)或者我使用fileBase64变量(在GET /文件路由中注释),则会出现问题。同样,它是一致的:它适用于相同的文件,不适用于相同的文件。

作为一种简单的测试形式:

<!DOCTYPE html>
<html>
<body>
<form action="/attachment" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>

我想我必须做一些其他工作才能使这个文件适用于任何类型的文件。也许使用缓冲区不是这样的。

真的欢迎任何形式的帮助。提前谢谢。

我正在使用: node.js 0.10.33 表达4.12.2 multer 1.1.0

1 个答案:

答案 0 :(得分:0)

事实证明,multer没有问题。 通过将缓冲区保存到文件系统来演示。在所有情况下都可以正确保存文件。

router.get('/file', function (req, res, next) {
  res.type(fileName); //for setting mime type
  //return res.end(fileBase64, 'base64');
  return res.end(fileBuffer);
});

在代码中返回缓冲区时出现问题:

b.links(:xpath => '//div[@class="field"]/a').to_a.sample.click

所以这是另一个需要解决的问题。