作为一个简单的测试,我尝试上传带有内存存储的文件并将缓冲区保存在变量中。然后使用另一个路径检索文件。 像这样:
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
答案 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
所以这是另一个需要解决的问题。