Skip to main content
0

āļŠāļĢāļļāļ›āļŠāļąāđ‰āļ™ āđ† āļāđˆāļ­āļ™āđ€āļĢāļīāđˆāļĄāļ­āđˆāļēāļ™

āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āđ€āļĢāļēāļāđ‡āļˆāļ°āļĄāļēāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļģāļĢāļ°āļšāļšāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ āđ‚āļ”āļĒāđƒāļŠāđ‰ Node.js + Express.js āđāļĨāļ° Multer āļ•āļąāđ‰āļ‡āđāļ•āđˆāļĄāļēāļ—āļģāļ„āļ§āļēāļĄāļĢāļđāđ‰āļˆāļąāļāļāļąāļš Node.js + Express.js āđāļĨāļ° Multer āļ§āđˆāļēāļĄāļąāļ™āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āļ—āļģāđ„āļĄāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļ•āļąāļ§āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđƒāļ™āļāļēāļĢāļ—āļģ āļ§āļīāļ˜āļĩāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ āļˆāļ™āđ„āļ›āļ–āļķāļ‡āļ—āļģāđƒāļŦāđ‰āļĢāļ°āļšāļšāļ‚āļ­āļ‡āđ€āļĢāļēāļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ āļ–āđ‰āļēāđƒāļ„āļĢāļāļģāļĨāļąāļ‡āļŠāļ™āđƒāļˆāļŦāļąāļ§āļ‚āđ‰āļ­āļ™āļĩāđ‰āļ­āļĒāļđāđˆ āđ€āļĢāļēāļāđ‡āđ„āļ›āļĨāļļāļĒāļāļąāļ™āļ•āđˆāļ­āđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ–āļąāļ”āđ„āļ›āđ€āļĨāļĒ

Node.js āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Node.js āļ„āļ·āļ­ Cross Platform Runtime Environment āļŠāļģāļŦāļĢāļąāļšāļāļąāđˆāļ‡ Server āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļ”āđ‰āļ§āļĒāļ āļēāļĐāļē javascript āļŠāđˆāļ§āļĒāļ—āļģāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļžāļąāļ’āļ™āļē web application āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āđ‡āļšāļ—āļąāđ‰āļ‡āļāļąāđˆāļ‡ Frontend āđāļĨāļ° Backend āđ„āļ”āđ‰ āđ‚āļ”āļĒāļĄāļĩ framework āļĄāļēāļāļĄāļēāļĒāļ—āļĩāđˆāļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļžāļąāļ’āļ™āļē web application āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āđ„āļ›āļ­āļĩāļāđƒāļŦāđ‰āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰ āđ€āļĢāļēāļˆāļ°āļĄāļēāļ—āļģāļ„āļ§āļēāļĄāļĢāļđāđ‰āļˆāļąāļāļāļąāļš framework āļŠāļ·āđˆāļ­ Express.js āđāļĨāļ° Multer āđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ–āļąāļ”āđ„āļ›āļ„āļĢāļąāļš

Express.js āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Express.js āļ„āļ·āļ­ framework āļ—āļĩāđˆāļ–āļđāļāļžāļąāļ’āļ™āļēāļĄāļēāļˆāļēāļāđ‚āļĄāļ”āļđāļĨ http āļ‚āļ­āļ‡ Node.js āđāļ•āđˆāļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢ Routing āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āļŠāļ™āļąāļšāļŠāļ™āļļāļ™āļāļēāļĢāļ—āļģ Middleware āļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰āļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđāļĨāļ°āļ­āļ·āđˆāļ™ āđ† āļ­āļĩāļāļĄāļēāļāļĄāļēāļĒ āļˆāļķāļ‡āđ€āļ›āđ‡āļ™ framework āļ—āļĩāđˆāļĒāļ­āļ”āļ™āļīāļĒāļĄāļĄāļēāđƒāļ™ Node.js āđ€āļĄāļ·āđˆāļ­āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē web application āļ‹āļķāđˆāļ‡āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰ āđ€āļĢāļēāļˆāļ°āļĄāļēāđƒāļŠāđ‰ Express.js āđ€āļŠāđˆāļ™āļāļąāļ™

Multer āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Multer āđ€āļ›āđ‡āļ™ middleware āļ•āļąāļ§āļ™āļķāļ‡āļ—āļĩāđˆāļˆāļ°āļĄāļēāļŠāđˆāļ§āļĒāļˆāļąāļ”āļāļēāļĢ āļāļēāļĢāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāđƒāļ™āļāļąāđˆāļ‡ Node.js āđ‚āļ”āļĒāļ—āļĩāđˆāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒ āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ āļāļēāļĢāļāļģāļŦāļ™āļ”āļ›āļĢāļ°āđ€āļ āļ—āđ„āļŸāļĨāđŒ āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™ āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāđ„āļ”āđ‰

āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Node.js āđāļĨāļ° NPM

āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Node.JS āđāļĨāļ° NPM āđ€āļ›āđ‡āļ™āļ­āļĒāđˆāļēāļ‡āđāļĢāļ āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ Node.JS āļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ€āļ›āđ‡āļ™ Runtime Environment āļ”āđ‰āļ§āļĒāļ āļēāļĐāļē Javascript āđāļĨāļ°āļĄāļĩ NPM āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāđāļžāļ„āđ€āļāļˆāļ•āđˆāļēāļ‡āđ† āļŠāļģāļŦāļĢāļąāļšāļ—āļĩāđˆāļˆāļ°āđƒāļŠāđ‰āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰ āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āđ„āļ”āđ‰āļ—āļĩāđˆāļĨāļīāđ‰āļ‡āļ„āđŒāļ™āļĩāđ‰ Node.JS āđāļĨāļ° NPM

āđ€āļĄāļ·āđˆāļ­āļ—āļģāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ€āļŠāļĢāđ‡āļˆāļ—āļ”āļĨāļ­āļ‡āļ”āđ‰āļ§āļĒāļāļēāļĢāļžāļīāļĄāļžāđŒāļ„āļģāļŠāļąāđˆāļ‡ node -v āđƒāļ™ terminal āļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰āđ€āļĨāļ‚ version āļ•āļ­āļšāļāļĨāļąāļšāļĄāļē

input āļ—āļĩāđˆāļžāļīāļĄāļžāđŒāđƒāļ™ terminal

node -v

output āļ—āļĩāđˆāđ„āļ”āđ‰āļ•āļ­āļšāļāļĨāļąāļšāļĄāļē

v18.18.0

āļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„

āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āļĄāļĩāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ”āļąāļ‡āļ™āļĩāđ‰

  • āļŠāļĢāđ‰āļēāļ‡ folder āđ‚āļ›āļĢāđ€āļˆāļ„āļ”āđ‰āļ§āļĒāļŠāļ·āđˆāļ­āļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢ āļŦāļĢāļ·āļ­āļžāļīāļĄāļžāđŒāļ„āļģāļŠāļąāđˆāļ‡ mkdir āļ•āļēāļĄāļ”āđ‰āļ§āļĒāļŠāļ·āđˆāļ­āđ‚āļ›āļĢāđ€āļˆāļ„āļšāļ™ terminal
  • āļ—āļģāļāļēāļĢāđ€āļ›āļīāļ” terminal āļŠāļĩāđ‰āđ„āļ›āļ—āļĩāđˆ folder āļ”āđ‰āļ§āļĒāļ„āļģāļŠāļąāđˆāļ‡ cd āđ‚āļ›āļĢāđ€āļˆāļ„āļ‚āļ­āļ‡āđ€āļĢāļē āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļīāļ” folder āđāļĨāļ° terminal āļšāļ™ vscode āđ„āļ”āđ‰ āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļ
  • āļžāļīāļĄāļžāđŒāļ„āļģāļŠāļąāđˆāļ‡ npm init -y āļ–āđ‰āļēāđ€āļ•āļīāļĄ -y āļ•āđˆāļ­āļ—āđ‰āļēāļĒāļˆāļ°āđƒāļŠāđ‰āļ„āđˆāļē defalte āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļˆāļ°āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļ–āļēāļĄāđ€āļ§āļĨāļēāļ•āļīāļ”āļ•āļąāđ‰āļ‡ āđāļ•āđˆāļ–āđ‰āļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļāđ‰āđ„āļ‚āļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡ āđāļ™āļ°āļ™āļģāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļžāļīāļĄāļžāđŒ -y āļ•āđˆāļ­āļ—āđ‰āļēāļĒ

input āļ—āļĩāđˆāļžāļīāļĄāļžāđŒāđƒāļ™ terminal

mkdir My-file-upload-web
cd My-file-upload-web
npm init -y

output āļ—āļĩāđˆāđ„āļ”āđ‰āļ•āļ­āļšāļāļĨāļąāļšāļĄāļē

Wrote to /Users/petch/Desktop/My-project/My-file-upload-web/package.json:

{
  "name": "my-file-upload-web",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

āļˆāļ°āđ„āļ”āđ‰āđ„āļŸāļĨāđŒ package.json āļ‚āļķāđ‰āļ™āļĄāļē 1 āđ„āļŸāļĨāđŒāļ•āļēāļĄāļ āļēāļž āļ—āļĩāđˆāļŠāļĩāđ‰āđ„āļŸāļĨāđŒāļ—āļģāļ‡āļēāļ™āļŦāļĨāļąāļāļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ›āļ—āļĩāđˆ index.js āļ•āļĢāļ‡āļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āđ„āļ”āđ‰ āđāļ•āđˆāđ€āļĢāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ .js āļŠāļ·āđˆāļ­āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļ‚āļķāđ‰āļ™āļ”āđ‰āļ§āļĒ āđ‚āļ”āļĒāļˆāļ°āļĒāļąāļ‡āđ„āļĄāđˆāđ€āļĢāļīāđˆāļĄāļŠāļĢāđ‰āļēāļ‡āļ•āļ­āļ™āļ™āļĩāđ‰ āđ‚āļ”āļĒāđ€āļĢāļēāļˆāļ°āđ„āļ›āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Express.JS āđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›āļāļąāļ™āļāđˆāļ­āļ™āļ„āļĢāļąāļš

āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ Express.js + multer

āļžāļīāļĄāļžāđŒāļ„āļģāļŠāļąāđˆāļ‡ npm install express multer āļšāļ™ terminal āļˆāļ°āđ„āļ”āđ‰ folder node_modules āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļĄāļē āđāļĨāļ°āđƒāļ™ package.json āļˆāļ°āļĄāļĩāļāļēāļĢāđ€āļžāļīāđˆāļĄāļ•āļĢāļ‡āļŠāđˆāļ§āļ™ dependencies āļ‚āļķāđ‰āļ™āļĄāļē āļ‹āļķāđˆāļ‡āļˆāļ°āļšāļ­āļāļ§āđˆāļēāļ•āļ­āļ™āļ™āļĩāđ‰āđ‚āļ›āļĢāđ€āļˆāļ„āļ‚āļ­āļ‡āđ€āļĢāļēāļĄāļĩāļāļēāļĢāļĨāļ‡ node āļ­āļ°āđ„āļĢāļĨāļ‡āđ„āļ›āļšāđ‰āļēāļ‡ āļ‹āļķāđˆāļ‡āļŦāļĨāļąāļ‡āļˆāļēāļāļĨāļ‡āđ€āļŠāļĢāđ‡āļˆāļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰ express āļāļąāļš multer āđ€āļžāļīāđˆāļĄāļĄāļēāđ€āļ›āđ‡āļ™āļ­āļąāļ™āļĨāļ‡āđāļ›āļĨāļ§āđˆāļēāļĨāļ‡ Express.js āļāļąāļš multer āđ€āļŠāļĢāđ‡āļˆāđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒ

input āļ—āļĩāđˆāļžāļīāļĄāļžāđŒāđƒāļ™ terminal

npm install express multer

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ output āļ—āļĩāđˆāđ„āļ”āđ‰āļ•āļ­āļšāļāļĨāļąāļšāļĄāļē āļ­āļēāļˆāđ„āļĄāđˆāđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāđ€āļ§āļ­āļĢāđŒāļŠāļąāđˆāļ™āļ—āļĩāđˆāļ•āļīāļ”āļ•āļąāđ‰āļ‡

added 77 packages, and audited 78 packages in 3s

10 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

āļŦāļĨāļąāļ‡āļˆāļēāļāļĨāļ‡āđ€āļŠāļĢāđ‡āļˆāļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰ folder node_modules āđāļĨāļ° package.json āđāļāđ‰āđ„āļ‚āļ•āļēāļĄāļ āļēāļž āđ€āļ§āļ­āļĢāđŒāļŠāļąāđˆāļ™āļ­āļēāļˆāļ•āđˆāļēāļ‡āļāļąāļ™āđ„āļ”āđ‰āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāđ€āļ§āļĨāļēāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļ§āđˆāļēāđ€āļ§āļ­āļĢāđŒāļŠāļąāđˆāļ™āļĨāđˆāļēāļŠāļļāļ”āļ„āļ·āļ­āđ€āļ§āļ­āļĢāđŒāļŠāļąāđˆāļ™āļ­āļ°āđ„āļĢ

āļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļŦāļ™āđ‰āļē web frontend

āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļĢāļēāļāđ‡āļˆāļ°āļĄāļēāļŠāļĢāđ‰āļēāļ‡āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāļŠāļģāļŦāļĢāļąāļšāđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļģāļāļēāļĢāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ āļāđ‡āļˆāļ°āđ€āļ›āđ‡āļ™āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļš html template āļžāļ·āđ‰āļ™āļāļēāļ™ āđāļĨāļ°āđ€āļžāļīāđˆāļĄ <input type=”file” /> āļ‹āļķāđˆāļ‡āļŦāļĄāļēāļĒāļ„āļ§āļēāļĄāļ§āđˆāļēāđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļģāļāļēāļĢ input file āļ—āļĩāđˆāļ•āļĢāļ‡āļŠāđˆāļ§āļ™āļ™āļĩāđ‰ āđ‚āļ”āļĒāļ—āļģāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ index.html āđāļĨāđ‰āļ§ copy code āļ•āļēāļĄāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļĩāđ‰

Code āļŠāļģāļŦāļĢāļąāļš index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello multer</title>
</head>
<body>
    <h1>Please upload file</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="photo" />
        <input type="submit" value="Submit">
    </form>
</body>
</html>

āļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļŠāđˆāļ§āļ™āļ—āļģāļ‡āļēāļ™ Backend

āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰āđ€āļĢāļēāļāđ‡āļˆāļ°āļĄāļēāđƒāļŠāđ‰ Express.js āļāļąāļš multer āđƒāļ™āļāļēāļĢāļ—āļģāļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ server āđƒāļŦāđ‰āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāļĢāļđāļ›āļ āļēāļžāļˆāļēāļāļœāļđāđ‰āđƒāļŠāđ‰ āđ€āļĄāļ·āđˆāļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļģāļāļēāļĢāļ­āļąāļžāđ‚āļŦāļĨāļ”āļĢāļđāļ›āļˆāļēāļāļ—āļēāļ‡āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāļŠāđˆāļ§āļ™ frontend āđ‚āļ”āļĒāļ—āļģāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ index.js āđāļĨāđ‰āļ§ copy code āļ•āļēāļĄāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļĩāđ‰

Code āļŠāļģāļŦāļĢāļąāļš index.js

var express = require("express"); //import express āļ”āđ‰āļ§āļĒāļāļēāļĢāđƒāļŠāđ‰ require
var app = express(); //set express āđ„āļ§āđ‰āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđāļ›āļĢ app
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })
const port = 3000; //set āļ•āļąāļ§āđāļ›āļĢ port āđ€āļ—āđˆāļēāļāļąāļš 3000

//āđƒāļŠāđ‰ get āđ€āļžāļ·āđˆāļ­āđ€āļĢāļĩāļĒāļāđ„āļŸāļĨāđŒ index.html
app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html')
})

//āđƒāļŠāđ‰ post āđ€āļžāļ·āđˆāļ­āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢ upload
app.post('/upload', upload.single('photo'), (req, res) => {
    res.send(req.file)
})

// āđƒāļŠāđ‰ listen āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļāļ§āđˆāļē website āļˆāļ°āļ—āļģāļ‡āļēāļ™āļ—āļĩāđˆ port āļ­āļ°āđ„āļĢ āđ€āļĢāļēāđƒāļŠāđ‰āđƒāļŦāđ‰āđ€āļĢāļĩāļĒāļāļ•āļąāļ§āđāļ›āļĢ port
app.listen(port, () => {
    console.log(`Server running at <http://localhost>:${port}/`);
})

āļ—āļģāļāļēāļĢāļžāļīāļĄāļžāđŒāļ„āļģāļŠāļąāđˆāļ‡ node āļ•āļēāļĄāļ”āđ‰āļ§āļĒāļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ .js āļ‚āļ­āļ‡āđ€āļĢāļēāđƒāļ™ terminal

node index.js

output āļ—āļĩāđˆāđ„āļ”āđ‰āļ•āļ­āļšāļāļĨāļąāļšāļĄāļē āļˆāļ°āđ€āļ›āđ‡āļ™āļ•āļēāļĄāļ—āļĩāđˆāđ€āļĢāļēāđƒāļŠāđˆāđƒāļ™ console.log āđāļŠāļ”āļ‡āļ§āđˆāļē website āļ‚āļ­āļ‡āđ€āļĢāļēāļ—āļģāļ‡āļēāļ™āđāļĨāđ‰āļ§

Server running at <http://localhost>:3000/

āđƒāļŦāđ‰āļ—āļģāļāļēāļĢāđ€āļ›āļīāļ” http://localhost:3000/ āļšāļ™ web browser āļˆāļ°āļžāļšāļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāļ‚āļ­āļ‡āđ€āļĢāļēāļ•āļēāļĄāļ āļēāļž

āđāļĨāļ°āđ€āļ›āļīāļ”āđ‚āļ›āļĢāđ€āļˆāļ„āļ‚āļ­āļ‡āđ€āļĢāļēāļˆāļ°āļžāļšāļ§āđˆāļēāļĄāļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ folder uploads āļĄāļēāđƒāļŦāđ‰āđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒāļŦāļĨāļąāļ‡āļˆāļēāļāđ€āļĢāļēāļ—āļģāļāļēāļĢāļāļ” run node index.js

āđ€āļĄāļ·āđˆāļ­āđ€āļ§āđ‡āļšāļ‚āļ­āļ‡āđ€āļĢāļēāļžāļĢāđ‰āļ­āļĄāđāļĨāđ‰āļ§ āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļĢāļēāļ—āļģāļāļēāļĢāļĢāļ°āļšāļļāļ›āļĢāļ°āđ€āļ āļ—āđ„āļŸāļĨāđŒāđ€āļ›āđ‡āļ™āļĢāļđāļ›āļ āļēāļžāđƒāļ™ code āđƒāļŦāđ‰āļ—āļģāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āļ­āļąāļžāđ‚āļŦāļĨāļ”āļ āļēāļžāļ­āļ°āđ„āļĢāļāđ‡āđ„āļ”āđ‰ āđāļĨāđ‰āļ§āļ—āļģāļāļēāļĢāļāļ” submit āļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰ return json āļāļĨāļąāļšāļĄāļēāļ•āļēāļĄāļ āļēāļž

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ json āļ—āļĩāđˆ return āļāļĨāļąāļšāļĄāļē

{
    "fieldname":"photo",
    "originalname":"Image 17-10-2566 BE at 11.09.jpeg",
    "encoding":"7bit",
    "mimetype":"image/jpeg",
    "destination":"uploads/",
    "filename":"baee6dcc8ab7b5de4c6d4963dbec5d19",
    "path":"uploads/baee6dcc8ab7b5de4c6d4963dbec5d19",
    "size":29623
}

āļ­āļ˜āļīāļšāļēāļĒāđāļ•āđˆāļĨāļ° key āđƒāļ™ json

  • fieldname
  • originalname : āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒāļ—āļĩāđˆāđ€āļĢāļēāļ­āļąāļžāđ‚āļŦāļĨāļ”
  • encoding : āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļ”āđ‰āļ§āļĒāļ§āļīāļ˜āļĩāļāļēāļĢāđƒāļ”
  • mimetype : āļŠāļ™āļīāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒ
  • destination : folder āļ—āļĩāđˆāđ€āļāđ‡āļšāđ„āļŸāļĨāđŒ
  • filename : āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒāļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļĩāđˆāļ­āļąāļžāđ‚āļŦāļĨāļ”
  • path : location āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒ āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ (folder + āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ)
  • size : āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒ

āļ™āļ­āļāļˆāļēāļāļˆāļ°āđ„āļ”āđ‰ json return āļāļĨāļąāļšāļĄāļēāđāļĨāđ‰āļ§ āļˆāļ°āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒāđƒāļ™ folder upload āļ”āđ‰āļ§āļĒ āđāļŠāļ”āļ‡āļ§āđˆāļēāļĢāļ°āļšāļšāļ­āļąāļžāđ‚āļĨāļ”āđ„āļŸāļĨāđŒāļ‚āļ­āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰āđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒ āđāļ•āđˆāļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒāļĒāļąāļ‡āđ€āļ›āđ‡āļ™āļŠāļ·āđˆāļ­āđāļšāļšāļŠāļļāđˆāļĄāđāļĨāļ° folder āļĒāļąāļ‡āđ€āļ›āđ‡āļ™ default āļ—āļĩāđˆāļĄāļēāļˆāļēāļ multer āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›āđ€āļĢāļēāļˆāļ°āļĄāļēāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ§āļīāļ˜āļĩāļāļēāļĢāļāļģāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ āđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļ­āļ·āđˆāļ™ āđ† āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļāļąāļšāļ‡āļēāļ™āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āļ„āļ™āļ„āļĢāļąāļš

āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡ Multer

āđƒāļ™āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē folder āļ—āļĩāđˆāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒāđāļĨāļ°āļ•āļąāđ‰āļ‡āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ āđƒāļŦāđ‰āļ™āļģ code āļ•āļēāļĄāļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡āļ™āļĩāđ‰ āļ™āļģāđ„āļ›āđƒāļŠāđˆāđƒāļ™ index.js āđāļĨāđ‰āļ§āļ—āļģāļāļēāļĢāđāļāđ‰āđ„āļ‚ const upload āđ€āļ›āđ‡āļ™ const upload = multer({ storage }) āđ€āļžāļ·āđˆāļ­āđ€āļ›āđ‡āļ™āļāļēāļĢāļŠāļĩāđ‰āđ„āļ›āļ—āļĩāđˆ const storage āļ—āļĩāđˆāđ€āļĢāļēāļ—āļģāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē folder āļ—āļĩāđˆāļˆāļ°āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒāđāļĨāļ°āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒāđ„āļ§āđ‰āđāļĨāđ‰āļ§

const storage = multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './my-folders') // folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļāđ‡āļšāđ„āļŸāļĨāđŒ
  },
  filename: function (req, file, callback) {
    callback(null, file.originalname) //āđƒāļŦāđ‰āđƒāļŠāđ‰āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ original āđ€āļ›āđ‡āļ™āļŠāļ·āđˆāļ­āļŦāļĨāļąāļ‡āļ­āļąāļžāđ‚āļŦāļĨāļ”
  },
})

const upload = multer({ storage })

āļŦāļĨāļąāļ‡āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āļ—āļģāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ folder my-folders āđāļĨāđ‰āļ§āļĨāļ­āļ‡āļ—āļģāļāļēāļĢ run node index.js āđƒāļŦāļĄāđˆ āđāļĨāđ‰āļ§āļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāđƒāļŦāļĄāđˆāļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡ āļˆāļ°āļžāļšāļ§āđˆāļēāđ„āļŸāļĨāđŒāļˆāļ°āļ–āļđāļāđ€āļāđ‡āļšāđ„āļ§āđ‰āļ•āļēāļĄ folder āļ—āļĩāđˆāđ€āļĢāļēāļ•āļąāđ‰āļ‡āđ„āļ§āđ‰ āđāļĨāļ°āļŠāļ·āđˆāļ­āđ„āļĄāđˆāđ€āļ›āđ‡āļ™āđāļšāļšāļŠāļļāđˆāļĄāđāļĨāđ‰āļ§

āļ­āļ˜āļīāļšāļēāļĒāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ

  • destination āļĢāļ°āļšāļļāđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒāļ—āļĩāđˆāļˆāļ°āļ­āļąāļžāđ‚āļŦāļĨāļ”
  • filename: function āļāļģāļŦāļ™āļ”āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒāđ„āļ”āđ‰ āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđƒāļŠāđ‰ file.originalname

āļŠāđˆāļ‡āļ—āđ‰āļēāļĒāļāđˆāļ­āļ™āļˆāļēāļāļāļąāļ™

āļˆāļ°āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļˆāļēāļāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļĢāļ°āļšāļšāļ­āļąāļžāđ‚āļŦāļĨāļ”āļ”āđ‰āļ§āļĒ Node.js + Express.js āđāļĨāļ° Multer āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĄāđˆāļĒāļēāļ āđƒāļ„āļĢ āđ† āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰ āđƒāļ„āļĢāļ—āļĩāđˆāļ„āļīāļ”āļ§āđˆāļēāđāļ„āđˆāļ™āļĩāđ‰āļĒāļąāļ‡āđ„āļĄāđˆāļžāļ­āļŠāļēāļĄāļēāļĢāļ–āļ­āđˆāļēāļ™āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđ„āļ”āđ‰āđƒāļ™āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡ multer npm āļĒāļąāļ‡āļĄāļĩāļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļ­āļ·āđˆāļ™ āđ† āļ­āļĩāļāļĄāļēāļāļĄāļēāļĒāļ—āļĩāđˆāđāļ•āđˆāļĨāļ°āļ„āļ™āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āļ›āļĢāļąāļšāđƒāļŠāđ‰āđƒāļŦāđ‰āđ€āļ‚āđ‰āļēāđ‚āļ›āļĢāđ€āļˆāļ„āļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ”āđ‰āļ­āļĩāļ āđ€āļŠāđˆāļ™āļāļēāļĢāļāļģāļŦāļ™āļ”āļ‚āļ™āļēāļ”āđ„āļŸāļĨāđŒāļŠāļđāļ‡āļŠāļļāļ” āļāļēāļĢāļ—āļģāđƒāļŦāđ‰āļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāđ„āļ”āđ‰āļŦāļĨāļēāļĒ āđ† āđ„āļŸāļĨāđŒāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™ āļŠāļļāļ”āļ—āđ‰āļēāļĒāļ™āļĩāđ‰āļāđ‡āļŦāļ§āļąāļ‡āļ§āđˆāļēāļ—āļļāļāļ„āļ™āļˆāļ°āđ„āļ”āđ‰āļ„āļ§āļēāļĄāļĢāļđāđ‰āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ—āļĩāđˆāđ„āļ”āđ‰āđ„āļ›āļ—āļģāđ‚āļ›āļĢāđ€āļˆāļ„āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āļ„āļ™āđ„āļ”āđ‰āļ„āļĢāļąāļš āļ‚āļ­āļšāļ„āļļāļ“āļ„āļĢāļąāļš

āļ­āđ‰āļēāļ‡āļ­āļīāļ‡

  1. NodeJS āļ„āļ·āļ­ āļ­āļ°āđ„āļĢ ? āļĄāļēāļ—āļģāļ„āļ§āļēāļĄāļĢāļđāđ‰āļˆāļąāļāļ•āļąāļ§āļŠāđˆāļ§āļĒāļžāļąāļ’āļ™āļēāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļĒāļ­āļ”āļ™āļīāļĒāļĄ ! āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļ https://blog.openlandscape.cloud/nodejs
  2. āļĢāļđāđ‰āļˆāļąāļāļāļąāļš JavaScript āđāļĨāļ° Node.js āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļhttps://kongruksiam.medium.com/%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%9A-javascript-%E0%B9%81%E0%B8%A5%E0%B8%B0-nodejs-8b5041853eae
  3. āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Express.Js āļ—āļģāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļšāļ™ Node.Js āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļ http://marcuscode.com/tutorials/nodejs/introducing-nodejs
  4. multer – npm āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļ https://www.npmjs.com/package/multer?fbclid=IwAR3M3x2UC-hKrCK4Ot4NiqHnjU7AflEtsFkoUrea8zYhBkf0Gx1V803GkUA
  5. Node.js : āļāļēāļĢ Upload āđ„āļŸāļĨāđŒāļ”āđ‰āļ§āļĒāļĄāļ­āļ”āļđāļĨ multer āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļ https://dev.to/bhurisub/node-js-upload-multer-1j7g
  6. āļ—āļģāļĢāļ°āļšāļšāļ­āļąāļžāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāļ”āđ‰āļ§āļĒ Node.js + Multer āļŠāļ·āļšāļ„āđ‰āļ™āđ€āļĄāļ·āđˆāļ­ 15 āļ•āļļāļĨāļēāļ„āļĄ 2566 āļˆāļēāļ https://blog.devahoy.com/blog/file-upload-nodejs-multer
petch.natawat

Author petch.natawat

Devops @ NXP Thailand

More posts by petch.natawat
Close Menu

āđ€āļĢāļēāđƒāļŠāđ‰āļ„āļļāļāļāļĩāđ‰āđ€āļžāļ·āđˆāļ­āļžāļąāļ’āļ™āļēāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđāļĨāļ°āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāļ”āļĩāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āļ„āļļāļ“ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļĻāļķāļāļĐāļēāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđ„āļ”āđ‰āļ—āļĩāđˆ āļ™āđ‚āļĒāļšāļēāļĒāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āđ€āļ­āļ‡āđ„āļ”āđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āđ„āļ”āđ‰āđ€āļ­āļ‡āđ‚āļ”āļĒāļ„āļĨāļīāļāļ—āļĩāđˆ āļ•āļąāđ‰āļ‡āļ„āđˆāļē

āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§

āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļļāļāļāļĩāđ‰āđ‚āļ”āļĒāđ€āļ›āļīāļ”/āļ›āļīāļ” āļ„āļļāļāļāļĩāđ‰āđƒāļ™āđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āđ„āļ”āđ‰āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ āļĒāļāđ€āļ§āđ‰āļ™ āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

āļĒāļ­āļĄāļĢāļąāļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”
āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§
  • āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™
    āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āļĨāļ­āļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ›āļāļ•āļī āđāļĨāļ°āđ€āļ‚āđ‰āļēāļŠāļĄāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āļ„āļļāļ“āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ›āļīāļ”āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ™āļĩāđ‰āđƒāļ™āļĢāļ°āļšāļšāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ”āđ‰
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

  • āļ„āļļāļāļāļĩāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļēāļ‡āļāļēāļĢāļ•āļĨāļēāļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒ āđāļĨāļ° āļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™ āļŠāļīāļ™āļ„āđ‰āļē āļĢāļ§āļĄāļ–āļķāļ‡āļŦāļĨāļąāļāļŠāļđāļ•āļĢāļŸāļĢāļĩ āđāļĨāļ° āļŠāļīāļ—āļ˜āļīāļžāļīāđ€āļĻāļĐāļ•āđˆāļēāļ‡ āđ† āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļ›āļīāļ”āļ„āļļāļāļāļĩāđ‰āļ›āļĢāļ°āđ€āļ āļ—āļ™āļĩāđ‰āđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāđˆāļ‡āļœāļĨāļ•āđˆāļ­āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļŦāļĨāļąāļ āđ€āļ§āđ‰āļ™āđāļ•āđˆāļāļēāļĢāļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™āļ—āļĩāđˆāļ­āļēāļˆāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

āļšāļąāļ™āļ—āļķāļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē