Skip to content

createObjectURL

Blob, ArrayBuffer, Response에서 객체 URL을 만듭니다.

API

createObjectURL

반환값

인자설명타입
Promise<string>객체 URL로 이행되는 PromisePromise

매개변수

매개변수설명타입기본값
src데이터의 출처Blob | ArrayBuffer | Response | string필수

예시

기본 사용법(Blob)

js
import { createObjectURL } from 'ranuts';

const blob = new Blob(['Hello World'], { type: 'text/plain' });
const url = await createObjectURL(blob);
console.log(url); // 'blob:http://example.com/...'

ArrayBuffer에서 만들기

js
import { createObjectURL } from 'ranuts';

const buffer = new ArrayBuffer(8);
const url = await createObjectURL(buffer);
console.log(url); // 'blob:http://example.com/...'

Response에서 만들기

js
import { createObjectURL } from 'ranuts';

const response = await fetch('https://example.com/image.jpg');
const url = await createObjectURL(response);
console.log(url); // 'blob:http://example.com/...'

문자열을 넘겼을 때

js
import { createObjectURL } from 'ranuts';

// 문자열을 넘기면 그대로 돌려줍니다
const url = await createObjectURL('https://example.com/image.jpg');
console.log(url); // 'https://example.com/image.jpg'

이미지 미리 보기

js
import { createObjectURL } from 'ranuts';

async function previewImage(file) {
  const url = await createObjectURL(file);
  document.getElementById('preview').src = url;
}

참고

  1. 비동기: Promise를 반환하니 await.then()으로 다루세요.
  2. 받는 타입: Blob, ArrayBuffer, Response, 문자열을 받습니다.
  3. 메모리 관리: 만들어진 URL은 직접 URL.revokeObjectURL()을 불러 풀어 주어야 합니다.
  4. 활용: 파일 미리 보기, 임시 URL 만들기, 이미지 가공 등에 흔히 쓰입니다.

requestUrlToBuffer

XMLHttpRequest로 URL의 내용을 날바이트로 가져옵니다. 그 바이트는 대개 위의 createObjectURL로 넘어갑니다. 보여 줄 수 있는 URL로 바꾸기 전에 내용을 살피거나 손보아야 할 때(매직 넘버 확인, 오디오 디코딩 따위) 쓰지요.

js
import { requestUrlToBuffer, createObjectURL } from 'ranuts/utils';

const result = await requestUrlToBuffer('/assets/clip.webm', {});
if (result.success) {
  const url = await createObjectURL(new Blob([result.data]));
  video.src = url;
}

매개변수

매개변수설명타입기본값
src가져올 URLstring필수
optionsmethod(기본 'GET')와 responseType(기본 'arraybuffer')Partial<RequestUrlToArraybufferOption>필수

반환값

HTTP 200이면 { success: true, data, message: '' }로 이행하고, 그 밖에는 { success: false, data: status, message }거부하는 Promise입니다. 실패한 요청은 거부이지 success: false로 이행한 것이 아니므로, .catch() 없이 .then()만 쓰면 처리되지 않은 거부로 드러납니다.

새로 짠다면 fetch

이것은 fetch가 어디서나 쓰이게 되기 전부터 있던 것이라 속으로 XMLHttpRequest를 씁니다. XHR이 꼭 필요한 사정(업로드 진행 이벤트, abort())이 없다면 fetch(url).then(r => r.arrayBuffer())가 같은 일을, 프로미스 본래의 거부 모양으로 해냅니다.

MIT 라이선스로 배포됩니다.