使用Express将文件读取到节点中的字节
在我正在处理的Web应用程序上,用户可以上传PDF文件。 我想阅读这个PDF文件到一个字节缓冲区,我可以传递到我的数据库将其保存为一个BLOB。 我正在使用Express框架在Node中执行此操作。
目前,我有以下几点:
上传表单:
<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); }); });
这给了我fs.read
函数调用一个Bad argument
错误。 什么是错的,我该如何解决?
fs.read()
的第一个参数应该是一个文件描述符对象,由fs.open()
返回。
你可以首先调用fs.open()
,或者使用fs.readFile()
,它需要一个path:
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); }); });