constrp=require('request-promise');constfs=require('fs');asyncfunctionupload(options){letoptions={url:'https://localhost/upload/',method:'POST',formData:{key:'value',file:{// value: fs.readFileSync('fn.jpg'),value:fs.createReadStream('fn.jpg'),options:'fn.jpg'}},/* formData 를 쓰면 header 는 알아서 만들어 준다.
headers: {
'Content-Type': 'multipart/form-data; boundary=ㅡmybound',
Content-Length: xxx
}
*/};try{letres=awaitrp(options);console.log(res);}catch(e){console.log(e);}}
formData:{// 단순 key - value: stringkey1:['key1 has value string',// value: Arraykey11:['key11','has','value','array'],/*
// 실제로 해보면 에러가 난다.
// source.on is not a function
// value 는 string, Buffer 등만 되는 듯?
key2: { data: 'key2 has value object' },
key3: {
name: 'filename3.png',
data: 'key3 has value object with name'
},
*/// options: stringkey4:{value:'key4 has value { value: string, options: string }',options:'filename4.png',// -> { filename: 'filename4.png' }},// options: objectkey5:{value:'key5 has value { value: string, options: { filename, contentType } }',options:{filename:'filename5.unknown',contentType:'image/png'}},/* 에러
key6: {
value: {
name: 'value6.jpg',
data: 'key6 has value.name and options.filename'
},
options: {
filename: 'options6.png',
}
}
*/}
결과
--myboundary\r\n
Content-Disposition: form-data; name="key1"\r\n
\r\n
key1 has value string\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key11"\r\n
\r\n
key11\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key11"\r\n
\r\n
has\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key11"\r\n
\r\n
value\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key11"\r\n
\r\n
array\r\n
/* 에러 : source.on is not a function
--myboundary\r\n
Content-Disposition: form-data; name="key2\r\n
Content-Type: application/octet-stream\r\n
??? : { data: 'key2 has value object' }\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key3"; filename="value3.png"\r\n
Content-Type: image/png\r\n
\r\n
??? : { name: 'filename3.png', data: 'key3 has value object with name' }\r\n
*/
--myboundary\r\n
Content-Disposition: form-data; name="key4"; filename="filename4.png"\r\n
Content-Type: image/png\r\n
\r\n
key4 has value { value: string, options: string }\r\n
--myboundary\r\n
Content-Disposition: form-data; name="key5"; filename="filename5.unknown"\r\n
Content-Type: image/png\r\n
\r\n
key5 has value { value: string, options: { filename, contentType } }\r\n
/* 에러 : source.on is not a function
--myboundary\r\n
Content-Disposition: form-data; name="key6"; filename="options6.png"\r\n
Content-Type: image/jpeg\r\n
\r\n
??? : { name: 'value6.jpg', data: 'key6 has value.name and options.filename' }\r\n
*/
--myboundary--\r\n