@jood/file-reader

javascript clientside file reader


Keywords
javascript, typescript, es6, frontend, file, fileReader, fileChunk, blob, image, resize, quality, exif, optimize
License
MIT
Install
npm install @jood/file-reader@0.2.3

Documentation

@jood/file-reader

javascript clientside file reader


TRAVIS NPM version NPM license NPM download NPM bundle size


FileReadStream

(ํ•œ๋ฒˆ์— ์ฝ๊ธฐ ์–ด๋ ค์šด)ํŒŒ์ผ ์ฝ๊ธฐ

  • chunkSize: number (default: 1024 * 1024 * 10) - ํŒŒ์ผ์„ 1ํšŒ ์ฝ์„ ๋•Œ byte ๋Ÿ‰
  • responseType: FileReadResponseType (BLOB) - ํŒŒ์ผ์„ ์ฝ๊ธฐ ์™„๋ฃŒ ์‹œ ๋ฐ˜ํ™˜๋  ๊ฒฐ๊ณผ(Blob || ArrayBuffer[])
    • BLOB - ๊ฒฐ๊ณผ๊ฐ’์„ blob(Blob) ์œผ๋กœ ๋ฐ˜ํ™˜.
    • BUFFER - ๊ฒฐ๊ณผ๊ฐ’์„ buffers(ArrayBuffers[]) ๋กœ ๋ฐ˜ํ™˜.

Promise

import { FileReadStream, FileReadEvent, FileReadEventType, FileReadResponseType } from '@jood/file-reader';

const onFileInputChange = async (evt: Event) => {
  const file = (evt.target as HTMLInputElement).files[0];
  const reader = new FileReadStream(file, {
    chunkSize: 1024 * 10,
    responseType: FileReadResponseType.BLOB,
  });
  try {
    const { state } = await reader.start();
    const {
      fileName,
      fileType,
      fileSize,
      fileLastModified,
      total, // byte total
      readed, // byte read
      chunkSize, // config chunkSize
      responseType, // config responseType
      blob, // if responseType BLOB
      buffers, // if responseType BUFFER
    } = state;
    console.log('resolve', state);
  } catch (err) {
    console.error(err);
  }
}

Observable

import { FileReadStream, FileReadEvent, FileReadEventType, FileReadResponseType } from '@jood/file-reader';

const onFileInputChange = (evt: Event) => {
  const file = (evt.target as HTMLInputElement).files[0];
  const reader = new FileReadStream(file, {
    chunkSize: 1024 * 10,
    responseType: FileReadResponseType.BLOB,
  });
  console.log(reader);
  reader.observeState().subscribe((evt) => {
    const { type, state, error } = evt;
    if (type === FileReadEventType.CHANGE) {
      console.log('change', state.readed / state.total);
    } else if (type === FileReadEventType.RESOLVE) {
      console.log('resolve', state.blob);
    } else if (type === FileReadEventType.REJECT) {
      console.log('reject', error);
    }
  });
  reader.start();
}

BlobImageResize

์ด๋ฏธ์ง€์˜ ๋ฆฌ์‚ฌ์ด์ง•, quality ๋ณด์ •

  • expectWidth: number - ๋ฆฌ์‚ฌ์ด์ง• ์˜ˆ์ƒ width

  • expectHeight: number - ๋ฆฌ์‚ฌ์ด์ง• ์˜ˆ์ƒ height

  • resizeType: ResizeType (default=ResizeType.SCALE) - ๋ฆฌ์‚ฌ์ด์ง• ํƒ€์ž…. expectWidth, expectHeight ๊ธฐ์ค€.

    • COVER - ์—ฌ๋ฐฑ ์—†์ด expect ์‚ฌ์ด์ฆˆ๋ฅผ ์ฑ„์›€. ์›๋ณธ์ด expect ์‚ฌ์ด์ฆˆ ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋Š˜๋ฆฌ์ง€ ์•Š์Œ.
    • COVER_STRETCH - ์—ฌ๋ฐฑ ์—†์ด expect ์‚ฌ์ด์ฆˆ๋ฅผ ์ฑ„์›€. ์›๋ณธ์ด expect ์‚ฌ์ด์ฆˆ ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋Š˜๋ฆผ.
    • SCALE - ์ด๋ฏธ์ง€ ๋น„์œจ ์œ ์ง€, ์›๋ณธ์ด expect ์‚ฌ์ด์ฆˆ ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋Š˜๋ฆฌ์ง€ ์•Š์Œ.
    • SCALE_STRETCH - ์ด๋ฏธ์ง€ ๋น„์œจ ์œ ์ง€, ์›๋ณธ์ด expect ์‚ฌ์ด์ฆˆ ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ์ž‘์€๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๋Š˜๋ฆผ.
  • quality(default=0.9) - ์ด๋ฏธ์ง€ ํ€„๋ฆฌํ‹ฐ((0 < n < 1) ~ 1);

  • expectContentType: string (default=undefined) - quality ๋Š” image/jpeg ํƒ€์ž…์ธ ๊ฒฝ์šฐ๋งŒ ์ ์šฉ๋จ, ๊ฐ•์ œ๋กœ type ์„ ์ง€์ •ํ•˜์—ฌ quality ์ ์šฉ์„ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ. \ ์˜ˆ) image/png ํƒ€์ž…์ธ file ์˜ ๊ฒฝ์šฐ image/jpeg ๋กœ ๊ฐ•์ œ ์ง€์ •ํ•˜๋ฉด quality ์ ์šฉ์€ ๊ฐ€๋Šฅํ•˜๊ณ , ๋Œ€์‹  ์ด๋ฏธ์ง€์˜ transparent ์˜์—ญ์ด canvas ์˜ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ƒ‰์œผ๋กœ ์ฑ„์›Œ์ง.

  • fillBgColor: string (default=undefined) - expectContentType ์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ transparent ์ฒ˜๋ฆฌ๊ฐ€ canvas ์˜ ๊ธฐ๋ณธ์ƒ‰์ƒ์œผ๋กœ ์ฑ„์›Œ์ง€๋Š”๋ฐ ๊ทธ๋•Œ ์ ์šฉ๋  color ๊ฐ’.

  • applyOrientation: boolean (default=0) - exif orientation ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ orientation ๊ฐ’์„ ์ ์šฉํ•˜์—ฌ resize.
    ์ฐธ๊ณ : ์ด๋ฏธ์ง€ ์ƒ˜ํ”Œ github
    ์ฐธ๊ณ : iPhone Photo Orientation/Rotation in Browser

Promise

import { BlobImageResize } from '@jood/file-reader';
const onFileInputChange = async (evt: Event) => {
  const file = (evt.target as HTMLInputElement).files[0];
  const blob = new Blob([file], { type: file.type });
  const resizer = new BlobImageResize(blob, {
    resizeType: ResizeType.COVER,
    expectWidth: 200,
    expectHeight: 200,
    quality: 0.9,
  });
  try {
    const { blob, width, height } = await resizer.create();
    const resizedFile = new File([blob], file.name, {
      lastModified: file.lastModified || Date.now(),
    });
    console.log(resizedFile);
  } catch (err) {
    console.error(err);
  }
}

See


This library was generated with Angular CLI