programing

Node.js가 Blobs를 생성할 수 없습니까?

abcjava 2023. 7. 25. 20:24
반응형

Node.js가 Blobs를 생성할 수 없습니까?

node.js로 작업 중이며 오디오를 node.js 서버로 스트리밍했습니다.오디오 블롭을 만드는 과정에서 알게 되었습니다.

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

새로운 블롭에서 참조 오류가 발생합니다.Blob은 지원되지 않는 것 같습니다.node.jsfs 모듈로 저장하고 싶은 BLOB를 만들려면 어떻게 해야 합니까?

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

이진 NodeJS 버퍼를 JavaScript 어레이 버퍼로 변환

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

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

Node.js 16부터 가져올 수 있습니다.

import {Blob} from 'node:buffer';

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

그렇지 않으면, 그냥cross-blob:

import Blob from 'cross-blob';
 
new Blob([]);
//=> Blob {size: 0, type: ''}
 
// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;
참고: 이 답변은 Richie Bendall의 답변을 따르려는 경우에만 적용됩니다.

단답:

에서 가져오기를 방지합니다.

대신 노드에서 설명한 대로 이렇게 가져오기를 선호합니다.JS 문서입니다.(설명 예제):

import { Blob } from 'buffer';

긴 답변:

리치 벤달의 답변이 저에게 많은 도움이 되었습니다.하지만 수입은Blob부터node:bufferJest 유닛 테스트를 중단하고 다음 오류를 던집니다.

 FAIL  dist/tests/unit/users/getOneById.spec.js
  ● Test suite failed to run

    ENOENT: no such file or directory, open 'node:buffer'

      2 | import config from '../config/config';
      3 | import { getFileExt, getFileName, removeFile } from './file';
    > 4 | import { Blob } from 'node:buffer';
        | ^
      5 |
      6 | class PdfHelpers {
      7 |

      at Runtime.readFile (node_modules/jest-runtime/build/index.js:2118:21)
      at Object.<anonymous> (src/helpers/pdf.ts:4:1)

조롱하는 대신에node:buffer이상한 코드로 가져오기, 노드를 살펴봤습니다.JS 문서화 예제.그래서 그것은 그것을 증명합니다.Blob에서 가져올 수 있습니다.'buffer'

import { Blob } from 'buffer';

// ...

// Only the import is changing, don't change your existing implementation
const blob = new Blob([buf], { type: 'application/pdf' });

그리고 모든 Jest 오류가 사라졌습니다!

사용해 볼 수 있습니다.Readable.from(value.buffer)"스트림" 노드 api에서.

FormData append file로 보내드릴 수 있도록 해결되었습니다.

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

저는 ArrayBuffer 형태로 오디오 데이터를 수신하는 Node.js 프로젝트를 진행하고 있는데 브라우저에서 해당 데이터를 전송하고 재생하고 싶습니다.대부분의 어려움은 클라이언트에 ArrayBuffer를 보내거나 ArrayBuffer를 변환하여 버퍼를 보내려고 하는 것에서 비롯되었습니다.

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

  1. 서버에서 ArrayBuffer를 Base64로 인코딩된 문자열로 변환
  2. 서버에서 클라이언트로 Base64 문자열 반환/전송
  3. 클라이언트 측에 오디오 요소/개체를 만들고 소리를 재생합니다.

나는 ArrayBuffer > Base64 String 변환을 수행하기 위해 base64-arraybuffer를 사용했습니다(그러나 패키지 없이 이를 수행하는 것은 간단할 수 있습니다).

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

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

언급URL : https://stackoverflow.com/questions/14653349/node-js-cant-create-blobs

반응형