Cách chuyển audio định dạng base64 sang file trong PHP

Em chào mọi người,

Em muốn input là audio format base64 : data:audio/wav;base64,UklGRixADgBXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQBADgAAAAAAAAAAAAA sau đó PHP decode thành file audio mp3, wav, …

Phần text base64 em đã test kỹ với các tool encode mà trình phát có thể đọc được nên text base64 đầu vào đảm bảo không lỗi.

Nhưng PHP em code như này:
file_put_contents('audio.wav', base64_decode($_POST["data"]));
thì server đã tạo được file audio.wav rồi nhưng khi download về thì windows không thể phát được, hoặc không có tiếng, chỉ có 1 tiếng “bíp” (đã thử với tên file audio.mp3 vẫn lỗi)

Mong được giúp đỡ. Em cảm ơn!

Vậy $_POST["data"] chứa chuỗi base64 hay chứa cả nội dung chuỗi MIME phía trước?
base64_decode chỉ giải mã đối với chuỗi base64 thô (raw) thôi. Thêm đoạn data:audio/wav;base64, sẽ làm sai dữ liệu được giải mã.
Theo tài liệu từ trang chủ PHP thì những kí tự không nằm trong base64 sẽ bị loại bỏ một cách lặng lẽ.

invalid characters will be silently discarded.

data:audio/wav;base64,UklGRixADgBXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQBADgAAAAAAAAAAAAA
=>
dataaudio/wavbase64UklGRixADgBXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQBADgAAAAAAAAAAAAA

4 Likes

Cảm ơn anh, em fix được rồi, phải bỏ đoạn text MIME này data:audio/wav;base64, phía trước. Anh có thể cho em xin tài liệu nói về vấn đề được không?

Lên trang chủ php xem về phần hàm base64_decode.
https://www.php.net/manual/en/function.base64-decode.php

Còn về base64 thì bản chất không hề chứa chuỗi MIME phía trước, phần đó thêm vào để 1 số chương trình như trình duyệt hiểu đây là định dạng gì.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?