바이트를 선택에 따라 십진 바이트 혹은 이진 바이트로 바꾸게 하는 코드를 소개합니다.

const transFormatBytes = (
  bytes: number,
  digits: number = 0,
  isBinary: boolean = true
) => {
  const unit = isBinary ? 1024 : 1000;
  const yota = isBinary ? Math.pow(2, 80) : Math.pow(1000, 8);

  if (bytes >= yota) {
    return `${(bytes / yota).toFixed(digits)} ${unit ? "YiB" : "YB"}`;
  }

  const format = isBinary
    ? ["Bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"]
    : ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB"];

  const formatBytes = (
    value: number,
    divisor: number,
    digits: number,
    [currentLabel, ...otherLabels]: string[]
  ): string => {
    if (value < divisor) {
      return `${value.toFixed(digits)} ${currentLabel}`;
    }
    return formatBytes(value / divisor, divisor, digits, otherLabels);
  };

  return formatBytes(bytes, unit, digits, format);
};

사용하기

transFormatBytes(17179869184, 2)

>>> 16.00 GiB

'Javascript' 카테고리의 다른 글

[Browser API] fetch API를 알아보자!  (0) 2020.01.05
[WebAPI] window.localStorage 부시기!  (5) 2019.09.29
[Babel] 사용기(1)  (0) 2019.06.26
파일(Image) 용량을 확인하는 방법_v1  (0) 2019.06.05
배열의 중복값 제거  (0) 2019.04.25

VirtualBox 에서 CentOS7 를 설치하셨다면 아래의 [더보기]를 눌러주세요!

 

Why?

CentOS minimal install 경우 최소한의 설치만 이루어지기때문에 네트워크를 수동 설정을 해주어야 합니다.

 

편집기로 네트워크 설정 열기

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

 

편집기로 네트워크 설정 편집하기

ONBOOT가 기본값이 no로 되어있을테니 yes로 수정 후 저장하고 닫습니다.

  TYPE=Ethernet
  PROXY_METHOD=none
  BROWSER_ONLY=no
  BOOTPROTO=dhcp
  DEFROUTE=yes
  IPV4_FAILURE_FATAL=no
  IPV6INIT=yes
  IPV6_AUTOCONF=yes
  IPV6_DEFROUTE=yes
  IPV6_FAILURE_FATAL=no
  IPV6_ADDR_GEN_MODE=stable-privacy
  NAME=enp0s3
  UUID= //개인정보이므로 비공개합니다. 예)12e950f8-ac21-12a0-bbf1-123f4cfd1f6b
  DEVICE=enp0s3
- ONBOOT=no
+ ONBOOT=yes

 

최신 업데이트사항 체크하기

# yum check-update

 

최신 상태로 업데이트하기

# yum upgrade

 

네트워크 도구 설치

# yum install net-tools

 

CentOS7에서 자주 사용되는 툴을 설치하려면 [더보기]를 눌러주세요

더보기
# yum install nano wget curl net-tools lsof bash-completion

모듈/기능

nano 텍스트에디터
wget

주요기능) ftp, http, https를 활용한 웹 컨텐츠 다운로드 

curl
net-tools 네트워크 도구
lsof 시스템 내 프로세서들에 의해서 실행되고 있는 파일들의 정보를 볼 수 있는도구
bash-completion bash 자동완성

 

네트워크 재구동

# systemctl restart network

 

정상 동작여부 확인

# ifconfig

 

참고인용
https://www.tecmint.com/centos-7-initial-server-setup-and-configuration/
https://www.lesstif.com/pages/viewpage.action?pageId=13631535

'Infrastructure' 카테고리의 다른 글

Network  (0) 2020.01.22
[Linux/Centos7] 자주쓰는 기본 명령어  (0) 2020.01.12
[Linux]CentOS7 콘솔 키보드 조작  (0) 2020.01.08
[Linux] CentOS7 디렉토리 역할  (2) 2020.01.08
SALTSTACK 시작하기[1] - 쓰는 중  (0) 2019.10.25

fetch API는 XMLHTTPRequest에 대한 편의성을 증대하기 위해 ES6+에 추가되었습니다. 기존 XMLHTTPRequest은 사용성이 까다로워 jQuery.ajax 혹은 axios 라이브러리를 많이 사용해왔는데요.  이제는 라이브러리나 플러그인을 설치하는 번거로움없이 브라우저 네이티브로 제공되는 fetch API의 강력하고 유연한 사용성으로 네트워크 통신을 할 수 있습니다. 

 

주의점

  • 브라우저 호환성: Chrome 이외는 브라우저는 버전이 낮을 경우 polyfill을 적용하여  fetchAPI를 사용하여야합니다. 
  • fetch()로 부터 반환되는 Promise 객체는 HTTP error 상태를 reject하지 않습니다. HTTP Statue Code가 404나 500을 반환하더라도요. 대신 ok 상태가 false인 resolve가 반환되며, 네트워크 장애나 요청이 완료되지 못한 상태에는 reject가 반환됩니다.
  • 보통 fetch는 쿠키를 보내거나 받지 않습니다.  사이트에서 사용자 세션을 유지 관리해야하는 경우 인증되지 않는 요청이 발생합니다. 쿠키를 전송하기 위해서는 자격증명(credentials) 옵션을 반드시 설정해야 합니다.
    2017년 8월 25일 이후. 기본 자격증명(credentials) 정책이 same-origin 으로 변경되었습니다. 파이어폭스는 61.0b13 이후 변경되었습니다.

주의점을 살펴보았으니 각설하고, fetch API의 사용을 위해 간단한 방법을 알아보겠습니다. 

 

// url은 필수, options는 선택사항
fetch(url, options)

 

너무 간단했나요? 아래는 fetch API의 디테일한 사용방법입니다.

 

fetch(url, {
  method: 'GET' // *GET, POST, PUT, DELETE, etc.
  mode: 'cors', // no-cors, cors, *same-origin
  cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
  credentials: 'same-origin', // include, *same-origin, omit
  headers: {
  'Content-Type': 'application/json',
  // 'Content-Type': 'application/x-www-form-urlencoded',
  },
  redirect: 'follow', // manual, *follow, error
  referrer: 'no-referrer', // no-referrer, *client
  body: JSON.stringify(data), // body data type must match "Content-Type" header
})
.then(response => response.json());
// 응답받은 JS오브젝트를 JSON객체로 변환합니다.
// JSON 구조의 데이터를 사용하기위해 변환작업을 하는 것입니다.

.then(response => response.html()); 
// 응답받은 JS오브젝트를 html객체로 변환합니다.
// html 구조의 데이터를 사용하기위해 변환작업을 하는 것입니다.

 

읽기 싫어지시죠? 글자가 많으면 읽기 싫어지는 법입니다. 하지만 메뉴얼을 잘 읽어야 제대로 사용할 수 있습니다. 메뉴얼을 잘 읽어보는 습관이 중요합니다. 그럼 테스트로 fetchAPI를 사용해보겠습니다. 일단 Chrome 브라우저를 열어서 F12(macOS 사용자의 경우 cmd + alt + i)를 눌러 개발자도구를 엽니다. console 을 찾아 아래의 코드를 입력합니다.  아래는 fetch API로 요청하고, 응답을 확인하는 코드입니다.

 

const response = fetch("https://jsonplaceholder.typicode.com/todos/1");
console.log(response)

 

콘솔에 입력후 엔터를 치자마자 응답이 올겁니다. 응답된 객체는 역시 Promise객체입니다.

 

► Promise {<pending>}

 

이 Promise객체의 상태를 가볍게 뜯어보면 아래의 형태로 되어있습니다.

 

▼Promise {<pending>}
  ►__proto__: Promise
   [[PromiseStatus]]: "resolved"
  ►[[PromiseValue]]: Response

 

잠시 설명을 드리자면 __proto__에는 Promise의 내부함수들이 들어가있습니다. [[PromiseStatus]]에는 기다린 데이터가 왔다는 의미의 'resolved' 그리고 [[PromiseValue]]에는 Response에 대한 Header정보들이 들어가있습니다. 더 자세히 설명하면 Promise에 대한 소개로 빠질 것 같으니 이만 줄이겠습니다.

 

Promise가 생소하신 분들은 Promise가 왔는데 뭐 어쩌라고? 빨리 원하는 데이터를 보여줘!!! 라고 생각하실 수 있는데요. 그런 분들을 위해 지금 바로 console에 아래의 코드를 입력하여, 방금보낸 요청에 대한 응답을 확인해보겠습니다.

 

response
  .then(result => result.json())
  .then(json => {
  console.log(json);
});

 

풀어서 설명드리자면, 첫번째 then에서는 result를 json객체로 변환하여 리턴합니다. 두번째 then에서는 첫번째 then에서 리턴한 데이터를 json이라는 인자에 담아와서 console.log로 데이터를 보여줍니다. 참고로 then이 반환값을 있다면 직후 then이 직전 then반환값을 인자에 담아서 쓸 수 있는데요. 이러한 기술명칭을  Promise Chaining이라고합니다.  

 

또한 fetch API로 요청한 https://jsonplaceholder.typicode.com/todos/1 API는 요청시 반드시 JSON으로 반환(응답)되어야한다는 약속이 되어 있기때문에 json()을 쓴 것입니다. 만약 반환값이 HTML구조의 객체였다면 html()을 사용하여 변환(파싱)해야합니다. (예: result.html())

 

응답온 데이터 확인하기

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

 

fetch API에 대한 사용법을 간단하게 알아봤습니다. 추가로 http, https 등은 외부로부터 데이터를 내부로 가져오는 것이기때문에 보안이 중요한 사이트에서는 옵션설정을 꼼꼼하게 잘 해주어야합니다.

 

참고인용
fetch API의 대해서
https://developer.mozilla.org/ko/docs/Web/API/Fetch_API
fetch API의 사용법https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Fetch%EC%9D%98_%EC%82%AC%EC%9A%A9%EB%B2%95

'Javascript' 카테고리의 다른 글

transform byte to binary byte or Decimal byte  (0) 2020.08.18
[WebAPI] window.localStorage 부시기!  (5) 2019.09.29
[Babel] 사용기(1)  (0) 2019.06.26
파일(Image) 용량을 확인하는 방법_v1  (0) 2019.06.05
배열의 중복값 제거  (0) 2019.04.25

특징


동기? 비동기? 그리고 저장 만료일

1. localStorage에서 모든 작업은 동기로 이루어집니다. 즉, 원하는 것을 바로 실행(생성, 수정, 읽기, 삭제)이 된다는 것이죠.

대기시간이 없기때문에 비동기에 비해 쉽고, 편리합니다.

 

2. session, cookie는 저장만료일(expire)이 있습니만, localStorage는 저장만료일이 없습니다.

브라우저 캐쉬, 저장공간 비우기 등등을 활용하여 사용자가 직접 삭제하거나, 개발자가 약간의 세팅을 해주어야 합니다.

저장공간

Mobile 환경에서의 저장공간

  Chrome Android Browser Firefox Safari Safari iOS WebView iOS WebView
  40 4.3 34 6, 7 8 6, 7 8
LocalStorage 10MB 2MB 10MB 5MB 5MB 5MB 5MB

 

Desktop 환경에서의 저장 공간

  Chrome Firefox Safari Safari IE IE
  40 34 6, 7 8 9 10, 11
LocalStorage 10MB 10MB 5MB 5MB 10MB 10MB

하나의 도메인당 5~10MB 정도로 작고 귀여운 용량이지만, 순수한 텍스트로 5MB를 채운다는 건 상상도 못할 일입니다. 

아래 링크는 순수한 텍스트로 이루어진 약 5.6MB크기의 텍스트입니다.(새창열기로 다운로드되지않고 보입니다.)

https://ars.els-cdn.com/content/image/1-s2.0-S0092640X00908349-mmc02.txt

주의점

localStorage에 사용자의 개인신상정보를 저장할 경우 해커에 의해 유출될 수 있습니다.

반드시 보안이 좋고, 안전한 저장공간에 저장하시길 바랍니다.

사용법


#준비물

locaStorage.html, localStorage.js

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  
</body>
<script src="./localStorage.js"></script>
</html>

 

지금부터 localStorage.js 파일을 작성할 것이니 잘 보고 순서대로 따라하시면 금방 습득할 수 있을 것 입니다.

 

1. 저장하기

window.localStorage.setItem("key", "value")

window.localStorage.setItem("myData", "string")

//확인하기
window.localStorage.myData
>>> "stirng"

 

2. 가져오기

window.localStorage.getItem("key")

const getItem = window.localStorage.getItem("myData")

//확인하기
console.log(getItem)
>>> "string"

 

3. 삭제하기

window.localStorage.removeItem("key")

window.localStorage.removeItem("myData")

>>> undefined

 

4. 중요! 에러가 될 수 있는 경우

값이 없는데 undefined 출력되는 경우, chain

window.localStorage.myData

>>> undefined
/*
[3. 삭제하기]에서 myData를 삭제했기때문에  undefined 반환됩니다.
체인으로 접근했을 땐 undefined 뜹니다.
*/

 

값이 없는데 null 출력되는 경우, getItem(key)

window.localStorage.getItem("myData")

>>> null
/*
[3. 삭제하기]에서 myData를 삭제했기때문에  null 반환됩니다.
getItem 함수로 접근했을 땐 null이 반환됩니다.
*/

이렇게 값이 undefined 혹은 null 일 경우, 값을 활용하여 가공을 하는 과정에서 에러가 날 수 있습니다.

 

const myData = window.localStorage.getItem("myData")
myData.filter(v => parseInt(v.score[0]) >= 8)

>>> Uncaught TypeError: Cannot read property 'filter' of null
/*
현재 localStorage에 key들 중 이름이 myData인 것이 없습니다.
그러므로, 변수 myData의 경우 null이 할당됩니다.
배열이 아닌 구조에 filter 메서드를 사용할 경우 오류가 납니다.
*/

localStorage에 원하는 값이 없을 경우를 대비하여 대체할 값이나 혹은 초기값을 반드시 세팅해주어야합니다. 

 

5-1. 응용하기

const defaultMovies = [
  {title: "힘을 내요. 미스터리", score: "8.47"},
  {title: "예스터데이", score: "8.45"},
  {title: "장사리", score: "8.54"},
]

const getMyMovies = window.localStorage.getItem("myMovies")
// window.localStorage에 저장된 값이 없기때문에 getMyMovie에 반환되는 값은 null입니다.

const movies = getMyMovies ? JSON.parse(getMyMovies) : defaultMovies
// 변수 movies는 getMyMovie의 키가 없기 때문에 defaultMovies이 참조됩니다.

const filteredMovies = movies.filter(v => parseInt(v.score[0]) >= 8)
// score가 8.0 이상인 영화를 필터링합니다.

console.log(filteredMovies)
>>> [
  {title: "힘을 내요. 미스터리", score: "8.47"},
  {title: "예스터데이", score: "8.45"},
  {title: "장사리", score: "8.54"},
]

getMyMovies 에는 null 이 들어있습니다. 그러므로 movies 는 defaultMovies를 바라보게 됩니다. defaultMovies의 값을 가지는 movie에 filter메서드를 사용하여 score가 8.0 이상인 영화만 걸러냅니다. defaultMovies의 모든 영화들은 8.0 이상이니 값이 그대로 나옵니다.

 

5-2. 응용하기

// 추가된 코드
const myMovies = [
  {title: "나쁜녀석들", score: "8.37"},
  {title: "타짜", score: "7.05"},
  {title: "양자물리학", score: "8.91"},
]

const defaultMovies = [
  {title: "힘을 내요. 미스터리", score: "8.47"},
  {title: "예스터데이", score: "8.45"},
  {title: "장사리", score: "8.54"},
]

// 추가된 코드
if(myMovies.length > 0){
  window.localStorage.setItem('myMovies', JSON.stringify(myMovies))
}

// myMovies의 사이즈가 0 보다 크다면 데이터가 있는 것으로 판단하고, localStorage 에 저장하게 됩니다.

const getMyMovies = window.localStorage.getItem("myMovies")
const movies = getMyMovies ? JSON.parse(getMyMovies) : defaultMovies
const filteredMovies = movies.filter(v => parseInt(v.score[0]) >= 8)

console.log(filteredMovies)
>>> [
  {title: "나쁜녀석들", score: "8.37"},
  {title: "양자물리학", score: "8.91"},
]

 

6. 최종코드

const myMovies = [
      {title: "나쁜녀석들", score: "8.37"},
      {title: "타짜", score: "7.05"},
      {title: "양자물리학", score: "8.91"},
    ]

const defaultMovies = [
      {title: "힘을 내요. 미스터리", score: "8.47"},
      {title: "예스터데이", score: "8.45"},
      {title: "장사리", score: "8.54"},
    ]

if(myMovies.length > 0){
	window.localStorage.setItem('myMovies', JSON.stringify(myMovies))
}

const getMyMovies = window.localStorage.getItem("myMovies")
const movies = getMyMovies ? JSON.parse(getMyMovies) : defaultMovies
const filteredMovies = movies.filter(v => parseInt(v.score[0]) >= 8)

console.log(filteredMovies)
>>> [
    {title: "나쁜녀석들", score: "8.37"},
    {title: "양자물리학", score: "8.91"},
  ]

 

참조

https://www.html5rocks.com/en/tutorials/offline/quota-research/

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

'Javascript' 카테고리의 다른 글

transform byte to binary byte or Decimal byte  (0) 2020.08.18
[Browser API] fetch API를 알아보자!  (0) 2020.01.05
[Babel] 사용기(1)  (0) 2019.06.26
파일(Image) 용량을 확인하는 방법_v1  (0) 2019.06.05
배열의 중복값 제거  (0) 2019.04.25

ES6가 원활히 돌아가기 위해서 최신 브라우저가 필요하다.

하지만 모두가 최신 브라우저를 쓰지않기때문에 오래된 문법을 작성할 수 밖에 없는데

Babel은 최신 문법을 사용성이 넓은 범위의 문법으로 변환시켜주기 때문에

실험정신이 있는 개발자에게 필수 플러그인이다.

 

[1] html 코드삽입으로 바벨사용하기

<div id="result"></div>
/* support IE9+ */
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
//babel 을 불러온다.

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js"></script>
// babel 실행에 필요한 기능을 불러온다.

<script type="text/babel" data-presets="es2015,stage-2">
// type="text/babel" data=presets="es2015, stage-2"
// babel을 사용할 것이고, es2015를 사용할 것이고, stage-2 는 Babel 플러그인의 안정적인 버전이다.

    const hello = (data) => {
        document.querySelector('#result').innerText = data
    }
    
    hello("hello");
</script>

 

 

 

참고: https://babeljs.io/docs/en/

 

Babel · The compiler for next generation JavaScript

The compiler for next generation JavaScript

babeljs.io

 

 

'Javascript' 카테고리의 다른 글

[Browser API] fetch API를 알아보자!  (0) 2020.01.05
[WebAPI] window.localStorage 부시기!  (5) 2019.09.29
파일(Image) 용량을 확인하는 방법_v1  (0) 2019.06.05
배열의 중복값 제거  (0) 2019.04.25
[자료구조]  (0) 2019.04.25

파일용량을 확인하는 방법을 두가지를 포스팅할 것이다.

사실 더 많을수도 있고, 알게 되면 더 포스팅 할 예정이다.

첫번째로 <input type="file"> 로 확인하는 방법

두번째로 AJAX 로 확인하는 방법

 

1. <input type="file"> 로 확인하는 방법

대부분 클라이언트에서 업로드할 파일의 용량을 제한하기 위해 사용된다.

 

ps. 본인은 img.src 를 통해 load된 이미지의 크기들을 DOM으로 가져오고 싶었다. 1번 방법아님.

 

1-1. html

<div>
	<input type="file" accept=".jpg, .jpeg, .png, .gif" id="inputFile" multiple>
	<div id="resultFile"></div>
</div>

1-2. javascript

const inputFile = document.querySelector('#inputFile');
const resultFile = document.querySelector('#resultFile');

inputFile.addEventListener('change', function(e) {
    return readURL(this)
}, false);

const readURL = input => {

    // 선택된 파일이 없으면 함수 종료
    if (!(input.files)) return
    
    // 결과창 초기화
    resultFile.innerHTML = "";
    
    // 선택된 파일만큼 반복
    for (let i = 0; i < input.files.length; i++) {
        
        //File정보를 읽을 수 있는 FileReader 호출
        const reader = new FileReader();
		
        //File 불러오기가 끝나면 실행될 함수
        reader.onload = function(e) {
            const img = new Image();
            
            // image파일의 blob 이 생성됨. blob -> 바이너리 오브젝트
            img.src = e.target.result
            
            // 생성된 데이터를 템플릿 문자열에 넣어준다.
            return resultFile.innerHTML +=
                `
                <dl>
                    <dt>${img.outerHTML}</dt>
                    <dd>${input.files[i].name}</dd>
                    <dd>${Math.round((input.files[i].size/1024)) + 'kb'}</dd>
                </dl>
                `;
        }
		
        // readAsDataURL은 Blob, File 을 읽을 수 있다.
        reader.readAsDataURL(input.files[i]);
    }
}

 

2. AJAX 로 확인하는 방법

AJAX로 이미지주소에 있는 이미지를 불러오면, ResponseHeader 객체가 생성되는데

여러 키값중 Content-Length 키, byte 값으로 이미지의 크기가 저장되어있다.

그러니 getResponseHeader()로 Content-Length를 가져오면 된다.

 

더 중요한 것은 

obj = URL.createObjectURL(Blob) 을 통해 생성된 URL객체는 

window.URL.revokeObjectURL(obj)를 통해 해제해주어야 가비지콜렉터

폐기된 정보를 수거해간다.

 

ps. 본인은 img.src 를 통해 load된 이미지의 크기들을 DOM으로 가져오고 싶었다.  2번도 아님.

 

2-1. html

<div>
    <input type="button" value="ajax 조회" id="callRequest">
    <div id="resultRequest"></div>
</div>

2-2. javascript

const resultRequest = () => {
		// 배열로 되어 있는 이미지의 주소
        const arrImages = [
            './images/image01.jpg',
            './images/image02.jpg',
            './images/image03.jpg'
        ]
        
        // selector
        const resultRequest = document.querySelector('#resultRequest');
        
        // 결과값 초기화
        resultRequest.innerHTML = "";
		
        // request 함수 시작
        const request = url => {
        
        	// XMLHttpRequest 호출
            const xhr = new XMLHttpRequest();
            
         	// 어떻게 가져올건지? 어디서 가져올건지? 비동기로 가져올건지?
            xhr.open('get', url, true);
            
            // responseType은 Blob 으로 가져온다. Blob === 바이너리 오브젝트
            xhr.responseType = "blob"
            
            // xhr의 상태값이 변했을 때
            xhr.onreadystatechange = () => {
                // 연결실패시 함수종료
                if (xhr.readyState !== 4) return;
                
                // 연결성공시 
                if (xhr.readyState === 4 && xhr.status === 200) {
                    const blob = xhr.response
                    
                    // URL.createObjectURL 은 blob 정보를 읽는다.
                    const objectURL = URL.createObjectURL(blob);
                    
                    // image에 Image객체를 호출
                    const image = new Image()
                    
                    // image의 src에 objectURL 할당
                    image.src = objectURL

                    resultRequest.innerHTML += '<p>' + image.outerHTML + '<br/>' +
                    	// getResponseHeader는 response 정보를 가져온다.
                        // Content-Length는 response header에 있으며, 
                        // FileSize가 byte단위로 담겨져있다.
                        Math.round(xhr.getResponseHeader('Content-Length') / 1024) + 
                        'kb </p>';
					
                    // 생성된 URL.createObjectURL을 해제하면 가비지컬렉터에서 수거해간다.
                    // setTimeout을 안할 경우 오류를 일으키는데 코드가 아래에 있어도
                    // 브라우저의 렌더링 과정에서 우선순위인 것 같다. 자세히 알아봐야함
                    const revoke = setTimeout(function() {
                        window.URL.revokeObjectURL(objectURL)
                        console.log('revoke')
                    }, 1000)
                }
            }
            xhr.send();
        }
		
        //이미지 갯수만큼 request 반복실행
        for (let i = 0; i < arrImages.length; i++) {
            request(arrImages[i])
        }
    }

    document.querySelector('#callRequest').addEventListener('click', resultRequest, false);

 

생각해본 것

3. cookie 나 cache에 접근하여 저장되어 있는 img의 size를 알 수있지않을까?(현재 이미지 이름만 출력가능한 상태)

4. 로드된 이미지들은 파일 생성자를 상속받는 인스턴스를 만들어 파일객체로 만들어본다?

5. 잠온다... 일단 자야지...

 

'Javascript' 카테고리의 다른 글

[WebAPI] window.localStorage 부시기!  (5) 2019.09.29
[Babel] 사용기(1)  (0) 2019.06.26
배열의 중복값 제거  (0) 2019.04.25
[자료구조]  (0) 2019.04.25
다수의 엘리먼트에 이벤트 등록하기  (0) 2019.04.11

document.querySelectorAll('targets') 으로 불러올 경우

nodeList가 유사배열(?)로 넘어오기때문에 [].forEach.call() 을 사용한다.


html

<button class="target-btn"> button01 </button>
<button class="target-btn"> button02 </button>
<button class="target-btn"> button03 </button>
<button class="target-btn"> button04 </button>
<button class="target-btn"> button05 </button>

 

javascript

function enterEvent(_targets, _event, _callback){
        [].forEach.call(_targets, _target => {
            _target.addEventListener(_event, function(e){
                console.log( this, e )
            })
        })
    }
    
    let targets = document.querySelectorAll('.target-btn');
    enterEvent(targets,'click');

 

'Javascript' 카테고리의 다른 글

배열의 중복값 제거  (0) 2019.04.25
[자료구조]  (0) 2019.04.25
base64 인코딩, 디코딩하기!  (0) 2019.04.11
[Object] Object 다루기 - map, filter 로 값 추출하기  (0) 2019.04.11
Promise Chain 구성하기  (0) 2019.04.11

base64 인코딩, 디코딩 해야될 때가 있다. 

이때 쓰면 편리한 것이다. 

 

 

function b64DecodeUnicode(str) {
  return decodeURIComponent(atob(str).split('').map(function(c) {
  	return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  }).join(''));
}
    
let char = "SEVMTE8gV09STEQh";
b64DecodeUnicode(char);
// >>> HELLO WORLD!

// base64 인코드 메소드 -> window.btoa()
let incodeChar;
incodeChar = window.btoa('targetChar'); 
// >>> dGFyZ2V0Q2hhcg==

// base64 디코드 메소드 -> window.atob()
let decodeChar;
decodeChar = window.atob(incodeChar);
// >>> targetChar

'Javascript' 카테고리의 다른 글

배열의 중복값 제거  (0) 2019.04.25
[자료구조]  (0) 2019.04.25
다수의 엘리먼트에 이벤트 등록하기  (0) 2019.04.11
[Object] Object 다루기 - map, filter 로 값 추출하기  (0) 2019.04.11
Promise Chain 구성하기  (0) 2019.04.11

+ Recent posts