nodejs -- Formidable 사용하여 multiple file upload 하기


환경 :  맥 El Capitan, Nodejs 4.2.1, formidable 1.0.17, fs-extra 0.26.7


참고 : https://github.com/felixge/node-formidable     ==> Formidable

         https://www.devbattles.com/en/sand/post-34-Upload+file+in+Node.js+using+formidable

         http://www.codediesel.com/nodejs/processing-file-uploads-in-node-js/

         http://stackoverflow.com/questions/34672568/http-file-upload-in-express-nodejs-server

         https://github.com/jprichardson/node-fs-extra#movesrc-dest-options-callback   ==> fs-extra




<< multiple file 업로드를 위한 HTML 설정 >>


<input type="file" name="upload" multiple="multiple">





<< Formidable >>


** Formidable.IncomingForm


var form = new formidable.IncomingForm();

  --> 새로운 incoming form 생성.


form.encoding = 'utf-8';

  --> Sets encoding for incoming form fields. default = 'utf-8'


form.uploadDir = "/my/dir";

  Sets the directory for placing file uploads in. 

  The default is os.tmpDir().



form.keepExtensions = true;

  form.uploadDir 에 파일 쓸때, 원래 확장자 사용할려면, true 로 해야함.



form.maxFieldsSize = 2 * 1024 * 1024;

  --> 메로리 할당 한계 ; default size is 2MB.



form.hash = false;

  --> checksums ; set this to either 'sha1' or 'md5'.


form.multiples = false;

  --> submit multiple files using the HTML5 multiple attribute

    ; false 로 설정해도, multiple file 업로드에는 지장없으나, true 로 설정해야 form.parse() 에서 util.inspect() 로 볼때  files 객체에 다중 파일보인다..



form.parse(request, [callback]);

   --> Parses an incoming node.js request containing form data.



** Formidable.File


file.size  --> 디스크에 쓰여진 파일 사이즈.


file.path  --> The path this file is being written to.


file.name


file.type  --> The mime type of this file





** Events


'progress'

   --> Emitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.


form.on('progress', function(bytesReceived, bytesExpected) {

});



'fileBegin'



'error'



'end'

  --> 모든 request를 받고, 디스크에 모든 파일를 쓴후 발생하는 event!

  --> response 보내는 위치.


form.on('end', function() {

});





<< 소스 >>


** <meta charset="utf-8"> 을 생략시에는 한글 파일 업로드시 한글이름깨짐.





<< progress 이벤트 추가 소스 >>


-- progress 이벤트, error 이벤트 추가함.


form.on('progress', function(bytesReceived, bytesExpected) {

});


form.on('error', function(err) {

});






Posted by 자유프로그램