簡體   English   中英

上傳到 aws s3 時上傳音頻文件緩沖區失敗

[英]Uploading audio file buffer fails when uploading to aws s3

這是我的前端代碼:

 let audioFile = require("assets/hello.wav");
    let blob = new Blob([audioFile], { type: "audio/wav" });

    try {
      await customFetch(`${API_URL}/new-audio-message`, {
        method: "POST",
        body: JSON.stringify({
          audio: blob,
          cloneId: cloneId,
        }),
      });
    } catch (error) {
      console.log(error);
    }

這是我將文件上傳到 s3 的方式:

const { audio } = JSON.parse(event.body);
const fileKey = `${sub}/${cloneId}/audio/${uuidv4()}.wav`;
const buffer = Buffer.from(JSON.stringify(audio));

  try {
    await s3
      .putObject({
        Bucket: PUBLIC_BUCKET,
        Key: fileKey,
        Body: buffer,
      })
      .promise();
  } catch (err) {
    console.error(err);
  }

文件上傳到 s3 ,但無論音頻文件的長度如何,每個音頻文件的文件大小都是155 B

問題似乎是audio文件在發送到 S3 之前沒有正確轉換為緩沖區。 const buffer = Buffer.from(JSON.stringify(audio))行試圖將audio object 轉換為字符串,然后從該字符串創建緩沖區。 但是,這不是將Blob object 轉換為緩沖區的正確方法。

更新的前端代碼

let audioFile = require("assets/hello.wav");
let blob = new Blob([audioFile], { type: "audio/wav" });

const reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onloadend = async () => {
  const buffer = Buffer.from(reader.result);
  try {
    await customFetch(`${API_URL}/new-audio-message`, {
      method: "POST",
      body: JSON.stringify({
        audio: buffer,
        cloneId: cloneId,
      }),
    });
  } catch (error) {
    console.log(error);
  }
};

更新后端代碼

const { audio } = JSON.parse(event.body);
const fileKey = `${sub}/${cloneId}/audio/${uuidv4()}.wav`;

try {
  await s3
    .putObject({
      Bucket: PUBLIC_BUCKET,
      Key: fileKey,
      Body: audio,
    })
    .promise();
} catch (err) {
  console.error(err);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM