【发布时间】:2017-09-11 13:44:33
【问题描述】:
我想将一个 MP3 文件从我的 Web 客户端上传到 Node Express 服务器。我可以上传文件,然后将其写入磁盘。但是,文件已损坏,我无法使用 MP3 播放器播放歌曲。
如果有区别,文件将从 OS X 机器上传,然后写入 Ubuntu 服务器。上传文件的上传大小比原来的大。我在此工作流程中没有收到任何错误。在我开始播放文件之前没有任何问题。
请参阅下面的代码。关于我为什么会遇到这种情况的任何想法?
客户
uploadSong: (song) => {
fetch('http://localhost:8080/song', {
method: 'PUT',
headers: {
'Content-Type': 'audio/mpeg',
},
body: song
})
.then( response => {
console.log("Got response after uploading song:", response);
})
.catch( error => {
console.log("Error in Firebase AC upload song: ", error);
});
}
服务器
app.put("/song", (req, res) => {
var mp3SongName = 'test.mp3';
var mp3_file = fs.createWriteStream(mp3SongName);
mp3_file.on('open', function (fd) {
req.on('data', function(data){
console.log("loading... \n");
mp3_file.write(data);
});
req.on('end', function(){
console.log("finalizing...");
mp3_file.end();
res.sendStatus(200);
});
});
}
【问题讨论】:
-
为了帮助诊断,我建议创建一个大小相似的文本文件并上传。然后您可以查看磁盘上文件的内容,以了解它与您发送的文件有何不同。
-
我怀疑这条线:
body: song。我的猜测是song不是它应该的样子。 -
@skirtle 好电话。我尝试上传一个只有“TEST”的测试文件。结果文件显示:“data:text/plain;base63,
” 然后我检查了 mp3 文件。其内容为:
data:text/plain;base63,
标签: javascript node.js express web file-upload