[javascript] Node.js는 Blob을 만들 수 없습니까?

node.js로 작업 중이며 내 오디오를 node.js 서버로 스트리밍했습니다. 이제 오디오 블롭을 작성하는 과정에서 발견했습니다.

var audioBlob = new Blob([dataview], { type: 'audio/wav' });

새 Blob에서 ReferenceError가 발생합니다. Blob이 지원되지 않는 것 같습니다. node.js fs 모듈로 저장하고 싶은 blob을 어떻게 만들 수 있습니까?

감사합니다!



답변

이 문제에 대한 해결책은 배열 버퍼와 노드 버퍼간에 변환 할 수있는 함수를 만드는 것입니다. 🙂

바이너리 NodeJS 버퍼를 JavaScript ArrayBuffer로 변환

최근 노드 버전에서는 다음과 같습니다.

let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;


답변

그냥 사용하십시오 cross-blob:

const Blob = require("cross-blob");

new Blob([]);
//=> Blob {size: 0, type: ""}

// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;


답변

고려해야 할 또 다른 솔루션은 Base64 문자열 을 사용하는 것입니다. 하여 서버에서 클라이언트로 데이터를 전송하는 것입니다.

저는 ArrayBuffer의 형태로 오디오 데이터를 수신하는 Node.js 프로젝트에서 작업 중이며 해당 데이터를 브라우저에서 보내고 재생하고 싶습니다. 내 투쟁의 대부분은 ArrayBuffer를 클라이언트에 보내거나 ArrayBuffer를 변환하고 버퍼를 보내려고 시도하는 데서 왔습니다.

저에게 간단한 해결책이 된 것은

  1. 서버에서 ArrayBuffer를 Base64로 인코딩 된 문자열로 변환
  2. 서버에서 클라이언트로 Base64 문자열 반환 / 보내기
  3. 클라이언트 측에 오디오 요소 / 객체를 만들고 사운드를 재생합니다.

나는 base64-arraybuffer 를 사용하여 ArrayBuffer> Base64 String 변환을 수행했습니다 (패키지없이 간단하게 수행 할 수 있음).

여기의 팁을 사용 하여 클라이언트 측에서 오디오 요소를 만들었습니다.

* 제한을 테스트하는 방법을 많이 수행하지 않았기 때문에 이것이 대용량 오디오 파일을 어떻게 처리 할 수 ​​있을지 모르겠습니다.


답변

제안으로 http://howtonode.org/really-simple-file-uploads 를 읽으십시오 .

제 말은 당신이 뭘하려고하는지 모르겠네요. blob을위한 모듈이 없을 수도 있지만, 디스크에 무언가를 쓰고 싶다면 fs 모듈이 있습니다.이 코드는 직접 작동하지 않지만 ..

var fs = require('fs')
  , express = require('express')

app.post('/upload', function (req, res) {
  // asynch call to write file to disk
  fs.write("/tmp/file.mp3", req.params.body, function (err) {
    if (err) console.log(err)
  });
  res.end();
});

mp3 또는 실제로 무엇이든 / upload에 게시하면 디스크에 기록됩니다. 원하는 유효성 검사를 수행 할 수 있습니다.


답변