【问题标题】:send a multipart request from a device to server in node.js在 node.js 中从设备向服务器发送多部分请求
【发布时间】:2015-04-02 13:47:48
【问题描述】:

我正在从设备接收视频字节,它应该是一个多部分请求。它是在 node.js 中创建的 post api。如何在 node.js 的 post api 中接收多部分请求。以下是当前正在保存视频字节的代码。

app.js
app.post('/saveVideo',service.saveVideo);

routes.js(class service method saveVideo)
var video_byte_string = req.param('videoByteStr');
var writeStream = gfs.createWriteStream({mode:'w',content_type: 'video/mov'});
var buffer = new Buffer(video_byte_string).toString('base64');
var response = streamifier.createReadStream(buffer).pipe(writeStream);

【问题讨论】:

  • 你试过我的答案了吗?如果是,请告诉我这样做的结果是什么?
  • @Dineshaws 不,我没有。我今天会试试,我会告诉你结果。

标签: javascript node.js rest


【解决方案1】:

您需要在视频再见字符串后附加一个分隔符,如下所示

如果字节串是 - 'abcdefghijklmnopqrstuvwxyz';

那么你需要像这样附加任何分隔符(#####)来标识完整字符串的结尾

现在您的请求字符串将是这样的 - 'abcdefghijklmnopqrstuvwxyz'+'#####';

现在您的请求字符串有一个结束分隔符(#####),您可以从中识别完整的块

var video_byte_string = req.param('videoByteStr');
isCorrectString = false;
data_stream += video_byte_string;
var n = data_stream.lastIndexOf("#####");
if (n === -1) {
    var steamArr= data_stream.split("#####");
    var completeByteString = steamArr[0];
    isCorrectString = true;
}

if(isCorrectString) {

    var writeStream = gfs.createWriteStream({mode:'w',content_type: 'video/mov'});
    var buffer = new Buffer(completeByteString).toString('base64');
    var response = streamifier.createReadStream(buffer).pipe(writeStream);
}

谢谢

【讨论】:

  • 我有一个查询,req.param('videoByteStr') 是否只收到一次请求?这意味着它只会收到一个块?
  • 你在用蒸汽吗?如果是,那么您将收到分块
  • 是的,如果您不使用流式传输,则意味着所有视频再见都将在单个块中接收。为了接收块,我提供了一个简单的例子,如果你是在块中
猜你喜欢
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
  • 2015-11-18
  • 2018-01-31
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多