gpt4 book ai didi

node.js - 将响应正文表达到缓冲区

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:10 25 4
gpt4 key购买 nike

我正在尝试使用 Node 构建一个快速且简单的图像上传服务,该服务获取接收到的图像并将其保存到 Mongo 的 GridFS 中。

GridFS get 需要一个 Buffer 对象 NodeJS Mongo Driver GridFS put

问题非常简单:如何准确地将接收到的请求正文转换/转换到正确的缓冲区中。

到目前为止我的代码(仅重要部分):api.js

var express = require('express');
var connect = require('connect');

var app = module.exports = express.createServer();

app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});

var upload = require('./upload.js');
app.post('/upload', upload.upload);

上传.js

exports.upload = (function(req, res, next){
console.log("Uploading image...");
// Create buffer
// Rest of the code
}

我已经尝试过:

  var buffer = new Buffer(util.inspect(req.body),'binary');

创建缓冲区,但它的大小错误,而且内容可能不正确,因为 util.inspect 显然不是正确的方法。

并且: var buffer = new Buffer(req.body);结果:

 [Decode error - output not utf-8][Decode error - output not utf-8]

缓冲区长度=0

总的来说,我对 Node 和 JavaScript 开发都很陌生,所以可能我错过了一些非常简单的东西,请毫不犹豫地指出明显的:)

谢谢!

最佳答案

首先,请记住 Express 构建于 Connect 之上,这是处理大量较低级别 HTTP 工作的库,它就是 bodyParser() 的位置。来自。

正文解析器中间件 internally使用Formidable解析文件上传。

Formidable 的默认行为是将上传的文件直接写入磁盘 - 换句话说,您实际上无权在路由处理程序中访问上传的文件流。您可以获得 <input> 中发送的任何常规表单字段 ( req.body s) 的值,您可以通过 req.files 获取上传的文件路径,但您没有获取文件内容。

这里简单的答案是简单地从磁盘读取文件并使用它保存到 Mongo 中,记住完成后删除临时文件。当然,这引入了不必要的中间步骤,即将文件上传写入临时文件夹,然后加载到 Mongo。

如果您想将文件数据直接流式传输到 Mongo 中,那么您面临的挑战更大。您必须编写自己的中间件来解析上传流。

这实际上相对容易。您可以从内部 Connect 正文解析器实现开始 - 使用 Formidable 来完成繁重的工作 - 并使用 onPart API将流传递回您的路由处理程序,以便您可以将其传递给 Mongo 驱动程序。

关于node.js - 将响应正文表达到缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com