我有一个微信小程序,可以上传从微信自己的RecorderManager创建的MP3文件。
wx.uploadFile({
url: `${config.serverBaseUrl}/audio_reviews`,
filePath: this.data.audioFile,
name: 'file',
formData: {
user_id: currentUser.id,
movie_id: movieId,
},
header: {
'content-type': 'multipart/form-data'
},
success(res) {
// success handler
}
})
我的Node.js服务器使用koa-body允许多部分/表单数据上传。
const body = require('koa-body');
app.use(body({
multipart: true,
formidable: {
keepExtensions: true,
}
}));
上传音频文件端点将文件上传到AWS S3。
createAudio: async (ctx, next) => {
const pg = new Client(config.pgConfig);
await pg.connect();
const body = ctx.request.body;
const file = ctx.request.files.file;
const s3 = new AWS.S3();
const params = {
Bucket: 'myS3Bucket',
Body: fs.createReadStream(file.path),
Key: file.path,
ContentType: 'audio/mpeg',
};
s3.upload(params, (err, data) => {
if (err) {
console.error(err);
};
if (data) {
// success handler
};
});
}
文件已上传到S3,但是当我下载文件时,没有声音。在将录音上传到服务器之前,我可以确认录音是否正确播放。我做错了什么?
答案 0 :(得分:0)
我有一个类似的问题,使用请求模块下载文件并将fs.createWriteStream(file)传递到指定路径。我将“完成”侦听器设置为等待文件完全下载,然后在回调中处理上传。
files
.filter(file => file.length)
.map(file => {
let fileName = `${path.resolve()}/files/mp3/${getFilename(file)}`
let filePath = fs.createWriteStream(fileName)
let options = {
method: "GET",
url: file
};
if(!fs.existsSync(fileName)) {
request(options).pipe(filePath)
filePath.on('finish', () => uploadFile(bucket, fileName))
}
});
就像您的问题一样,将文件写入磁盘后,我的文件没问题,但是尝试从s3下载链接后,它将无法播放。事实证明,它是在完全下载之前写入s3的(因此s3中每个文件的大小均为0B)。