我正在使用Flash录制音频并将其上传到节点服务器。Flash客户端是jrecorder的变体。当用户完成录制后,将使用POST请求(而不是表单,因为Flash无法创建文件)来上传音频,并将音频ByteArray作为POST请求的数据(请参见此处的更多信息)。
我可以使用下面的代码在Node-
land上正确接收文件,但是发出的音频被破坏了,您听不到任何声音。话虽如此,该文件的内容可以由VLC和其他播放器播放,而Sox可以将其编码为mp3。
这是我在使用Node时的代码:
var express = require('express');
var app = express();
app.use (function(req, res, next) {
req.rawBody = '';
req.setEncoding('utf8');
if(req.method.toLowerCase() == "post")
{
req.on('data', function(chunk) { req.rawBody += chunk });
req.on('end', function() { done(req, res); });
}
next();
});
function done(req, res)
{
fs.writeFile('abc.wav', req.rawBody, 'binary', function(err){
if (err) throw err;
// Save file to S3
}
}
现在,如果我使用相同的Flash客户端,并向Rails服务器发出POST请求并使用下面的代码,则文件将完美保存。
def record
file = request.raw_post
# Save file to S3
end
请注意,我不是Node专家,所以如果您对我应该使用什么而不是保存块有任何建议,请发布代码示例。我现在的主要目的是使它进入工作状态,然后再探索在Node(缓冲区,流等)中更高效地完成工作的其他方式
取出以下行
req.setEncoding('utf8');
您没有在接收utf8
数据,而是在接收binary
数据。
您最好使用缓冲区而不是字符串
app.use(function(req, res, next) {
var data = new Buffer('');
req.on('data', function(chunk) {
data = Buffer.concat([data, chunk]);
});
req.on('end', function() {
req.rawBody = data;
next();
});
});
下面是一个上传二进制文件的例子,WebService类的代码如下: package service; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import javax.activation.DataHandler; public class
更新:为了将来的参考,亚马逊现在已经更新了询问时的文档。根据@Loren Segal在下面的评论:- 我们已经更正了最新预览版中的文档,以正确记录此参数。很抱歉搞砸了! 有人能帮我使用上传二进制文件吗?
问题内容: 为了将二进制文件上传到URL,建议使用本指南。但是,该文件不在目录中,而是存储在MySql db的BLOB字段中。BLOB字段在JPA中映射为属性: 我以这种方式稍微修改了指南中的代码: 我没有使用分块流。使用的标头是: 主机正确接收了所有标头。它还接收上载的文件,但不幸的是,它抱怨该文件不可读,并且断言所接收文件的大小比我的代码输出的大小大37个字节。 我对流,连接和byte []的
我需要使用okhttp将捆绑在apk中的二进制文件上传到服务器。使用urlconnection,您可以简单地获得资产的inputstream,然后将其放入您的请求中。但是,okhttp只给你上传字节数组,字符串,或者文件的选项。由于您无法获得捆绑在apk中的资产的文件路径,唯一的选择是将文件复制到本地文件目录(我宁愿不这样做),然后将文件交给okhttp?难道没有办法直接使用assetinputs
本文向大家介绍Node.js实现文件上传,包括了Node.js实现文件上传的使用技巧和注意事项,需要的朋友参考一下 在工作中碰到了这样的需求,需要用nodejs 来上传文件,之前也只是知道怎么通过浏览器来上传文件, 用nodejs的话, 相当于模拟浏览器的行为。 google 了一番之后, 明白了浏览器无非就是利用http协议来给服务器传输数据, 具体协议就是《RFC 1867 - Form-ba
我有问题与费恩客户端。我只需要发送一个文件,我不想使用多部分MIME类型(因为我认为一个文件没有必要)。我可以通过创建编码器到字节数组来做到这一点,但我想使用一些流。 我如何编写接受一些java流并将其发送而不将文件数据缓冲到内存的Feign编码器。使用Feign客户端是否可以进行这种二进制传输? 我看到一些使用多部分文件的示例,它使用了“多部分/表单数据”,但我不想使用多部分。 有可能写这样一个