使用fetch、multer、express将blob数据发送到节点
Send blob data to node using fetch, multer, express
尝试发送blob对象到我的节点服务器。在客户端,我正在使用MediaRecorder录制一些音频,然后我想将文件发送到服务器进行处理。
saveButton.onclick = function(e, audio) {
var blobData = localStorage.getItem('recording');
console.log(blobData);
var fd = new FormData();
fd.append('upl', blobData, 'blobby.raw');
fetch('/api/test',
{
method: 'post',
body: fd
})
.then(function(response) {
console.log('done');
return response;
})
.catch(function(err){
console.log(err);
});
}
这是我的快车路线,它使用multer:
var upload = multer({ dest: __dirname + '/../public/uploads/' });
var type = upload.single('upl');
app.post('/api/test', type, function (req, res) {
console.log(req.body);
console.log(req.file);
// do stuff with file
});
但是我的日志没有返回任何东西:
{ upl: '' }
undefined
花了很长时间在这个所以任何帮助感激!
我只能运行你上面例子的最小配置,它对我来说工作得很好。
服务器:var express = require('express');
var multer = require('multer');
var app = express();
app.use(express.static('public')); // for serving the HTML file
var upload = multer({ dest: __dirname + '/public/uploads/' });
var type = upload.single('upl');
app.post('/api/test', type, function (req, res) {
console.log(req.body);
console.log(req.file);
// do stuff with file
});
app.listen(3000);
HTML文件在public
:
<script>
var myBlob = new Blob(["This is my blob content"], {type : "text/plain"});
console.log(myBlob);
// here unnecessary - just for testing if it can be read from local storage
localStorage.myfile = myBlob;
var fd = new FormData();
fd.append('upl', localStorage.myfile, 'blobby.txt');
fetch('/api/test',
{
method: 'post',
body: fd
});
</script>
前端的console.log(myBlob);
正在打印Blob {size: 23, type: "text/plain"}
。后端打印:
{}
{ fieldname: 'upl',
originalname: 'blobby.txt',
encoding: '7bit',
mimetype: 'text/plain',
destination: '/var/www/test/public/uploads/',
filename: 'dc56f94d7ae90853021ab7d2931ad636',
path: '/var/www/test/public/uploads/dc56f94d7ae90853021ab7d2931ad636',
size: 23 }
也可以尝试使用硬编码的Blob,如本例中用于调试目的。
不需要使用multer。在app.post()
中使用express.raw()
var express = require('express');
var app = express();
app.use(express.static('public')); // for serving the HTML file
app.post('/api/test', express.raw({type: "*/*"}), function (req, res) {
console.log(req.body);
// do stuff with file
});
app.listen(3000);
相关文章:
- 将节点数据分配给另一个变量jstree
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 如何将数据添加到json的子节点
- Firebase-返回用户uid并将用户元数据值设置为不同的节点
- 如何将数据POST到节点服务器并从中获取responseText
- 通过 AJAX 发送表单,HTML 节点选择用于数据发送
- 跨节点服务器上的多个 API 请求维护数据
- 节点.js 如何通过基本 Passport 在数据会话中维护所需的数据.js
- 节点.js 不等待数据
- 如何根据另一个节点中的数据对 Firebase 阵列进行排序
- 绘制的节点和Google图表/可视化中的数据节点之间的关系
- 是否有任何功能可以合并两个JSON数据集并替换旧信息?(节点.JS)
- 使用节点JS连接和断开数据卡
- 使用节点下载高图表数据,但不在浏览器中显示
- 在JavaScript节点环境中将Gzip内容编码响应转换为JSON数据
- Jqgrid Treegrid在更新本地源数据时重新加载节点
- Breeze不会用其真实数据替换Ref:节点
- 将json数据动态加载到D3节点中
- Firebase-javascript API 仅在一个触发器中获取满足条件的数据节点.还会为每个查询建立新的 TCP
- 如何访问雅虎天气's地理数据节点内的文本