You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将音频Blob文件上传至AWS S3存储桶?上传后文件为空求解

问题分析与解决方法

你的核心问题是误用了URL.createObjectURL()的返回值——它生成的是指向内存中Blob的URL字符串,不是实际的二进制音频数据。你把这个字符串塞进File构造函数,相当于上传了一段文本(就是那个blob:http://...的字符串),而不是真正的音频文件,所以S3里的文件是空的。

正确的处理方式

直接使用请求返回的原始二进制数据(response.data),不需要通过URL.createObjectURL()转成URL。前提是你发起请求时要确保返回的是Blob/ArrayBuffer类型,比如用axios的话要设置responseType: 'blob'。

修正后的代码示例

// 假设你的请求已经正确获取到Blob格式的音频数据(比如axios设置了responseType: 'blob')
const audioBlob = response.data;

// 直接将Blob作为Body上传,S3支持直接接收Blob类型
const command = new PutObjectCommand({
  Body: audioBlob,
  Bucket: BUCKET_NAME,
  Key: "filename2.mpeg",
  ContentType: "audio/mpeg" // 显式设置文件类型,避免S3自动识别错误
});

const newResponse = await client.send(command);

如果需要转成File的写法

const audioBlob = response.data;
const file = new File([audioBlob], 'filename2.mpeg', { 
  type: 'audio/mpeg', 
  lastModified: Date.now() 
});

const command = new PutObjectCommand({
  Body: file,
  Bucket: BUCKET_NAME,
  Key: "filename2.mpeg",
  ContentType: "audio/mpeg"
});

const newResponse = await client.send(command);

额外注意事项

  • 确认请求返回的是Blob:比如axios请求时添加responseType: 'blob'配置,fetch则用response.blob()转换响应体。
  • 显式设置ContentType能让S3正确识别文件类型,避免后续下载或预览时出现格式问题。

内容的提问来源于stack exchange,提问作者Jojo Momo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:15:00