하면 된다!!!

[nodejs] AWS S3 file 관리하기

프로그래밍/Javascript

급작스럽게 AWS S3 에서 파일을 올리고, 내리고 관리할 일이 발생했는데 임시 작업 이라서 nodejs 를 이용해서 처리 하기로 결정했다.

개발했던 내용을 좀 정리 해둔다.

 

 

먼저 aws-sdk 를 설치해야한다.

 

$ npm install aws-sdk

 

간단하게 목록 조회, 업로드, 다운로드 함수 구현한 내용중 일부를 기록해 둔다~

const fs = require('fs');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
    accessKeyId: "Your API Access Key ID",
    secretAccessKey: "Your API Secret Access Key"
});

/**
 * Object List from AWS S3 bucket
 * @param {Bucket: XXX, Prefix: XXX, MaxKeys: xxx} params 
 */
const listObjects = params => {
    s3.listObjectsV2(params, function (err, data) {
        if (err) {
            console.log(err);
            throw err;
        } else {
            if (data != null && data != undefined) {
                let fileList = data.Contents;
                if (fileList != null && fileList.length > 0) {
                    fileList.forEach((fileInfo, idx) => {
                        console.log(fileInfo);
                    });
                }
            } else {
                console.log(params.Prefix, "is not exists.");
            }
        }
    });
}

listObjects({ Bucket: 'My Bucket Name', Prefix: "path/to/", MaxKeys: 1000 });

/**
 * Download file from AWS S3
 * @param {*} params 
 */
const downloadFile = params => {
    s3.getObject(params.downloadParams, function (s3Err, data) {
        if (s3Err) throw s3Err
        fs.writeFileSync(params.savePath, data.Body)
    console.log('file downloaded successfully')
    });
}

var downParams = {
    downloadParams: {
        Bucket: "My bucket name",
        Key: "My object key"
    },
    savePath: "/path/to/abcde.txt"
};
downloadFile(downParams);

/**
 * File Upload to AWS S3
 * @param {*} uploadInfo 
 */
const uploadFile = uploadInfo => {
    fs.readFile(uploadInfo.filePath, function(err, data) {
        if (err) throw err;
        const params = {
            Bucket: uploadInfo.Bucket,
            Key: uploadInfo.Key,
            Body: JSON.stringify(data, null, 2)
        };
        s3.upload(params, function (s3Err, uploadData) {
            if (s3Err) throw s3Err
            console.log(`File uploaded successfully at ${uploadData.Location}`)
        });
    });
}

uploadFile({
    Bucket: "My Bucket Name",
    Key: "upload path and object key",
    filePath: "/path/to/abcde.txt"
});

 

JavaScript 단위 테스트를 위한 QUnit

프로그래밍/Javascript

JavaScript  단위 테스팅 프레임워크 QUnit


개발시 많이 사용하시는 jQuery, jQuery UI 개발을 한 팀에서 개발한 테스트 프레임워크 입니다.

자세한 설명은 아래의 페이지를 보시면 됩니다. 사용이 복잡치는 않네요.


http://www.sitepoint.com/getting-started-qunit/




SheetJS - Javascript로 XLSX 파일을 읽고 쓰고 변환하고~

프로그래밍/Javascript

jsPDF에 이어서 XLSX 파일을 읽고 쓸 수 있는 자바스크립트 라이브러리에 대한 소개입니다.

Office Open XML 스펙을 이용해서 순수 자바스크립트를 이용해서 구현한 라이브러리라고 하네요.


아래 Github에서 확인할 수 있습니다.


https://github.com/SheetJS/js-xlsx


엑셀 파일을 json 형태로도 바로 변환해줄 수도 있고 개발자들에게는 재밌는 라이브러리 인듯합니다.


Javascript를 이용해서 PDF 생성하기

프로그래밍/Javascript

Javascript를 이용해서 PDF를 만들어내는 라이브러리가 있네요.

MIT 라이센스이며 지원하는 브라우저는 IE6+*, Firefox 3+, Chrome, Safari 3+, Opera 입니다.


https://github.com/MrRio/jsPDF




트래커라는 단어 효과 - 웹 개발자분들 의견 좀 주세요.

프로그래밍/Javascript

프로젝트 중에 jQuery를 이용하고 있습니다.


머 평범하게 아래와 같은 형태로 ajax를 이용해서 서버와 통신을 하지요.


$.ajax({
	type: 'POST',
	url: "abc.jsp",
	data: $("#regFrm").serialize(), 
	success : function(data) {
		var res = data;
		//do_something_success();
	},
	error : function(res, status, err) {
		//do_something_error();
	}
});


그런데 오늘 생소한 현상을 발견했습니다.


아래의 형태로 불려지는 form에 특정 단어가 들어가게 되면 저 함수가 서버와 통신하지 못하고 error를 발생시킵니다.

IE, FF, Chrome 모두 마찬가지입니다.


serialize 에서 문제가 발생하거나 아니면 다른 문제일까 고민을 하면서 글을 작성하는데 이 티스토리에서 글을 작성할때도 해당 문자열이 포함되면 맛이 가더군요.


해당 단어는 영어로 트래커 (track er <- 글이 등록이 안되기 때문에 띄어쓰기를 해봤습니다) 라는 단어입니다.


저만 이러는 것인지요? 사무실에서 다른 분의 PC에서도 같은 현상이 발견되었는데... 도저히 이해가 안가네요.


무림의 고수님들의 조언 부탁드립니다. ㅠㅠ



Nodejs 소개 동영상

프로그래밍/Javascript

NodeJS 홈페이지 : http://nodejs.org/

소개 동영상...


node.js 갠찮다...

프로그래밍/Javascript
몇년전에 다루었던 리얼타임 메시징 관련 솔루션들이 있었는데...
유사하지만 다른 형태의 솔루션들이 나오고 있다. 역시... 시장에서는 너무 빨리 나오면 대박이 나거나 쪽박을 찬다.



JavaScript Operator의 ===, !== 연산자

프로그래밍/Javascript
===, !== 라는 연산자를 자주 봤었는데... 사용을 않하다 보니 모르고 살았다.
검색을 해보니... 아래와 같은 결과가...

일반적으로 javascript에서 == 을 하게 되면 값을 비교한다. 데이터 타입이 String, Int, Long 관계없이... 값만 같으면 true를 리턴했지만... === 3개짜리는 데이터 타입과 값이 같은 경우에 true를 리턴한다.
!== 는 당연히 반대겠죠~

=== This is the strict equal operator and only returns a Boolean true if both the operands are equal and of the same type. These next examples return true:
a === 2
b === 4


!== This is the strict not equal operator and only returns a value of true if both the operands are not equal and/or not of the same type. The following examples return a Boolean true:
a !== b
a !== "2"
4 !== '4'


Cross Domain Ajax Call 방법... (no Proxy)

프로그래밍/Javascript
Cross Domain Ajax Call 때문에 골머리를 썩은 적이 있었다.

Proxy를 거치면 프로세스상 네트워크를 한번 더 타기 때문에... 좋은 방안은 아니다. 그렇지만 방법을 몰라서 계속 난 이렇게 사용해왔다. (바보... ㅠㅠ)

좋은 방안들이 잇는데 그 중에 한개가 아래와 같은 방법이다.

http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html

다른 방법들도 소개를 하고 있는 글이 있는데 참고하시길...

http://snook.ca/archives/javascript/cross_domain_aj/


APE (Ajax Push Engine)

프로그래밍/Javascript
APE라는 오픈 소스 프로젝트가 있다. Ajax Push Engine 을 줄여서 APE라고 이름지었다.

웹 브라우저에서 자바스크립트를 이용하여 사용자 PC에 별도의 설치 없이 푸시 기능을 구현해내는 플랫폼이다. 서버 플랫폼이 별도로 있어서 다운받아서 테스트 해볼 수가 있도록 해두었다.

샘플로는 채팅기능이 주로 부각되어있다.




이런 솔루션으로 예전에 KnowNow 라는 제품도 있었는데... 회사가 망했다고 하는데 아직 있는지 모르겠다. 검색해보니 없어졌군 훔~