亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

koa2實現文件上傳

標簽:
Node.js

app.js

const Koa = require('koa')
const app = new Koa()
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')

const index = require('./routes/index')
const cascader = require('./routes/cascader')
const tree = require('./routes/tree')
const upload = require('./routes/upload')
const users = require('./routes/users')
const pdf = require('./routes/pdf')

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes: ['json', 'form', 'text']
}))
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

app.use(async (ctx, next) => {
  ctx.set('Access-Control-Allow-Origin', '*');
  ctx.set('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  if (ctx.method == 'OPTIONS') {
    ctx.status = 200
  } else {
    await next();
  }
})

// routes
app.use(index.routes(), index.allowedMethods())
app.use(cascader.routes(), cascader.allowedMethods())
app.use(tree.routes(), tree.allowedMethods())
app.use(upload.routes(), upload.allowedMethods())
app.use(users.routes(), users.allowedMethods())
app.use(pdf.routes(), pdf.allowedMethods())

// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

upload.js

const router = require('koa-router')()
const multer = require('koa-multer')

const storage = multer.diskStorage({
  // 文件保存路径,注意windows和linux系统存储路径写法区别,否则会报404错误
  destination: function (req, file, cb) {
    cb(null, 'public/uploads/')//path.resolve('public/uploads') // windows
    // cb(null, '/usr/local/themesui-server/public/uploads') // linux
  },
  //修改文件名称
  filename: function (req, file, cb) {
    const fileFormat = (file.originalname).split(".");  //以点分割成数组,数组的最后一项就是后缀名
    cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]);
  }
})
//加载配置
const upload = multer({
  storage: storage,
  limits: {
    // fileSize: 1024 * 1024 / 2 // 限制512KB
    fileSize: 1024 * 1024 * 20 // 限制15M
  }
});

router.prefix('/themesui/upload')

router.post('/', upload.single('file'), async (ctx, next) => {
  // 返回原文件名
  let name = ctx.req.file.originalname
  let url = `/uploads/${ctx.req.file.filename}`
  ctx.body = {
    code:200,
    name,
    url,
    userInfo: ctx.req.body
  }
})

module.exports = router

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消