123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- const http = require('http')
- const fs = require('fs')
- const path = require('path')
- const url = require('url')
- const formidable = require('formidable')
-
- const mimeTypes = {
- 'jpeg': 'image/jpeg',
- 'jpg': 'image/jpeg',
- 'png': 'image/png',
- 'svg': 'image/svg',
- 'gif': 'image/gif',
- 'mp4': 'video/mp4',
- 'mp3': 'audio/mp3'
- }
-
- const port = 9090
- const fileSaveDir = path.join(__dirname, 'temp')
-
- const uploadServer = (req, res) => {
-
- !fs.existsSync(fileSaveDir) && fs.mkdirSync(fileSaveDir)
- let responseData = []
-
- const form = new formidable.IncomingForm()
- form.uploadDir = fileSaveDir
- form.type = true
- form.keepExtensions = true
-
- form.parse(req, function(err, fields, files){
-
- if(!err) {
-
- Object.keys(files).forEach(function(key){
-
- const file = files[key]
- const filename = path.basename(file.path)
-
- // 塞入响应数据中
- responseData.push({
- type: file.type,
- name: filename,
- url: 'http://localhost:' + port + '/temp/' + filename,
- size: file.size / 1024 > 1024 ? (~~(10 * file.size / 1024 / 1024)) / 10 + 'MB' : ~~(file.size / 1024) + 'KB'
- })
-
- })
- } else {
- // console.warn(err)
- }
-
- res.setHeader('Access-Control-Allow-Origin', '*')
- res.writeHead(200)
- res.end(JSON.stringify(responseData))
-
- })
-
- }
-
- const staticServer = (req, res) => {
-
- var uri = url.parse(req.url).pathname
- var filename = path.join(process.cwd(), unescape(uri))
- var stats
-
- try {
- stats = fs.lstatSync(filename) // throws if path doesn't exist
- } catch (e) {
- res.writeHead(404, {'Content-Type': 'text/plain'})
- res.write('404 Not Found\n')
- res.end()
- return
- }
-
- if (stats.isFile()) {
- // path exists, is a file
- var mimeType = mimeTypes[path.extname(filename).split('.').reverse()[0]]
- res.writeHead(200, {'Content-Type': mimeType} )
- var fileStream = fs.createReadStream(filename)
- fileStream.pipe(res)
- } else if (stats.isDirectory()) {
- // path exists, is a directory
- res.writeHead(200, {'Content-Type': 'text/plain'})
- res.write('Index of '+uri+'\n')
- res.write('TODO, show index?\n')
- res.end()
- } else {
- // Symbolic link, other?
- // TODO: follow symlinks? security?
- res.writeHead(500, {'Content-Type': 'text/plain'})
- res.write('500 Internal server error\n')
- res.end()
- }
-
- }
-
- const server = http.createServer((req, res) => {
-
- if (req.method.toLowerCase() === 'get') {
- staticServer(req, res)
- } else {
- uploadServer(req, res)
- }
-
- })
-
- server.listen(port)
|