วิธีการแปลงไฟล์ blob เป็นรูปแบบเฉพาะ?

Aug 19 2020

ฉันกำลังสร้างเว็บแอปพลิเคชันด้วย ReactJS และ Django framework

ในเว็บแอปพลิเคชันนี้มีส่วนที่ฉันบันทึกไฟล์เสียงและส่งไปยังแบ็กเอนด์เพื่อบันทึก

นี่คือข้อมูลหยดจาก ReactJS ที่ฉันส่ง:

Blob {
size: 29535, 
type: "audio/wav; codecs=0"
}

และนี่คือรหัสที่ฉันใช้ในแบ็กเอนด์:

@api_view(['POST'])
@csrf_exempt
def AudioModel(request):
    try:
        audio = request.FILES.get('audio')
    except KeyError:
        return Response({'audio': ['no audio ?']}, status=HTTP_400_BAD_REQUEST)

    destination = open('audio_name.wav', 'wb')
    for chunk in audio.chunks():
        destination.write(chunk)
    destination.close()  # closing the file

    return Response("Done!", status=HTTP_200_OK) 

เมื่อฉันเล่นไฟล์ที่ฉันบันทึกไว้มันจะเล่นเสียงบางอย่าง แต่มันก็ขัดข้องเมื่อถึงจุดสิ้นสุด

ปัญหานี้ทำให้ฉันค้นหาข้อมูลบางอย่างเกี่ยวกับไฟล์ที่ฉันบันทึกไว้ (นามสกุล ... )

ด้วยเหตุนี้ฉันจึงใช้fleepห้องสมุด:

import fleep

with open("audio_name.wav", "rb") as file:
    info = fleep.get(file.read(128))

print(info.type)
print(info.extension)
print(info.mime)

เอาท์พุท:

['video']
['webm']
['video/webm']

แต่เอาออกวิดีโอ!

  • ฉันทำอะไรผิดหรือเปล่า?
  • ฉันจะแก้ไขปัญหานี้ได้อย่างไร
  • มีสิ่งใดบ้างที่ฉันสามารถใช้บันทึกไฟล์ในรูปแบบที่ต้องการได้?

ขอความช่วยเหลือใด ๆ

แก้ไข:

เอาต์พุตของไฟล์ที่บันทึกไว้ 128 ไบต์แรก:

b'\x1aE\xdf\xa3\x9fB\x86\x81\x01B\xf7\x81\x01B\xf2\x81\x04B\xf3\x81\x08B\x82\x84webmB\x87\x81\x04B\x85\x81\x02\x18S\x80g\x01\xff\xff\xff\xff\xff\xff\xff\x15I\xa9f\x99*\xd7\xb1\x83\x0fB@M\x80\x86ChromeWA\x86Chrome\x16T\xaek\xbf\xae\xbd\xd7\x81\x01s\xc5\x87\xbd\x8d\xc0\xd5\xc6\xaf\xd0\x83\x81\x02\x86\x86A_OPUSc\xa2\x93OpusHead\x01\x01\x00\x00\x80\xbb\x00\x00'

คำตอบ

Benny Aug 28 2020 at 16:19

ใช้SciPyเพื่ออ่านข้อมูลและเขียนข้อมูลลงในไฟล์รูปแบบต่างๆ

ตัวอย่างการใช้งาน:

  • การเขียนไฟล์ wav ใน Python ด้วย wavfile.write จาก SciPy
  • scipy.io.wavfile.write