使用Express将文件读取到Node中的字节

时间:2015-03-29 13:41:29

标签: node.js file express

在我正在处理的网络应用程序上,用户可以上传PDF文件。我想将这个PDF文件读取到一个字节缓冲区,我可以将其传递给我的数据库以将其保存为BLOB。我在Node中使用Express框架进行此操作。

目前,我有以下内容:

上传表单

<form id='uploadForm' method='post' enctype='multipart/form-data'>
    <div class='form-group'>
        <div class='form-inline'>
            <label for='file'>File:</label>
            <input type='file' name='file'>
        </div>
    </div>
    <!--- some other fields --->
</form>

服务器端:

router.post('/', function(req, res) {
    var file = req.files.file;
    var path = file.path;
    var fsiz = file.size;
    var buffer = new Buffer(fsiz);

    fs.read(file, buffer, 0, fsiz, 0, function (err, bytesRead, buffer) {
        console.log(err);
        console.log(bytesRead);
        console.log(buffer);
    });

});

这会在Bad argument函数调用中出现fs.read错误。有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:2)

fs.read()的第一个参数应该是fs.open()返回的文件描述符对象。

您可以先拨打fs.open(),也可以使用fs.readFile(),这需要一条路径:

router.post('/', function(req, res) {
    var file = req.files.file;
    var path = file.path;
    var fsiz = file.size;
    var buffer = new Buffer(fsiz);

    fs.open(path, 'r', function(err, fd) {

        fs.read(fd, buffer, 0, fsiz, 0, function (err, bytesRead, buffer) {
            console.log(err);
            console.log(bytesRead);
            console.log(buffer);
        });

    });

});
router.post('/', function(req, res) {
    var file = req.files.file;
    var path = file.path;
    var fsiz = file.size;
    var buffer = new Buffer(fsiz);

    fs.readFile(path, function (err, data) {
        console.log(err);
        console.log(data);
    });

});