Node.js 上传图片并保存
Node.js 上传图片并保存
依赖
package.json 文件
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"formidable": "^1.2.1",
"koa": "^2.5.1",
"koa-body": "^2.6.0",
"koa-logger": "^3.2.0",
"koa-router": "^7.4.0",
"koa-static-cache": "^5.1.2"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
主功能代码
const Koa = require('koa')
const logger = require('koa-logger')
const router = require('koa-router')()
const formidable = require('formidable')
const koaBody = require('koa-body')
const util = require('util')
const path = require('path')
const staticCache = require('koa-static-cache')
const fs = require('fs')
const app = new Koa()
const port = 8080
app.use(logger()) // 输出日志
app.use(koaBody()) // body 解析
// 设置img 目录为静态资源
app.use(staticCache(path.join(__dirname, 'img'), {
maxAge: 365 * 24 * 60 * 60,
gzip: true,
buffer: true,
dynamic: true
}))
router
// 首页
.get('/', ctx => {
ctx.body =
'<form action="/upload" enctype="multipart/form-data" method="post">' +
'<input type="text" name="title"><br>' +
'<input type="file" name="upload" multiple="multiple"><br>' +
'<input type="submit" value="Upload">' +
'</form>'
})
// 上传文件接口
.post('/upload', async ctx => {
const form = new formidable.IncomingForm()
// 设置存储文件的目录
const imgPath = path.join(__dirname, '/img')
// 如果目录不存在则创建
if (!fs.existsSync(imgPath)) fs.mkdirSync(imgPath)
form.uploadDir = imgPath
// 上传文件大小限制
form.maxFieldsSize = 20 * 1024 * 1024
let result = await new Promise(r => {
form.parse(ctx.req, function (err, fields, files) {
if (err) {
r({ err })
} else {
// 手动给文件加后缀, formidable默认保存的文件是无后缀的
let newPath = files.upload.path + '_' + files.upload.name
fs.renameSync(files.upload.path, newPath)
r({ path: newPath })
}
})
})
const basename = '/' + path.basename(result.path)
if (result.err) ctx.throw(400, '异常错误')
else ctx.body = `<p>url: ${basename}</p><img src=${basename} style="max-width: 100%;">`
})
app.use(router.routes())
app.on('error', (err, ctx) => {
log.error('server error', err, ctx)
})
app.listen(port, () => {
console.log('listen ', port)
})
运行
node .
Node.js 上传图片并保存的更多相关文章
- node.js 上传图片
依赖库 connect,gm,imagemagick,image-size connect:中间件 gm,imagemagick:用来处理图片如缩放.切割.添加文字水印等 image-szie:获取图 ...
- 上传图片到七牛云(服务端 node.js sdk)
大体思路 前端要上传图片到七牛云,需要有一个token进行授权操作,而获取这个上传的upload token(以下简称upToken),在服务端需要一定的身份校验,比如说:只有登录的vip用户才能拿到 ...
- Node.js 使用http客户端向网站请求数据并保存
app.js代码: // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=requir ...
- Node.js 项目搭建
关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...
- [读书笔记]了不起的node.js+实践(一)
环境的变化带来了技术大跃进,机遇和挑战同时到来.基于我js也没有学,只好赶鸭子上架一起学了.(>﹏<) 1.先读读书 一开始就不知死活地看<深入浅出node.js>,弄得团团转 ...
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- 初学node.js有感三
WebStorm下的node.js 一.回顾与继续 在前面,我们知道了node.js的基本框架和思路,在这些原生环境下我们对node.js的设计思想有了比较深刻的认识,并且具有了编写大型程 ...
- 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)
第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...
- node.js富文本编辑器
摘要: 最近在搭建自己的博客,这一段时间可能没有时间来写博客了,但是有了好东西还是要分享给大家.博客网站必然要有编辑文章的编辑器,所以在网上查了些资料.大部分编辑器的后台是基于java.php.asp ...
随机推荐
- PostgreSQL Metadata
http://www.devart.com/dotconnect/postgresql/docs/MetaData.html In this overload first parameter is ...
- java中的>>>和>>>=
“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0.当我们要作位移的原始值并非代表数值时(例如:表示颜色图素 ...
- 20条最最常用的Linux命令讲解
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- Java 开源博客 Solo 1.6.0 发布 - 新后台
简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤.除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动. ...
- 如何在FineReport中解析数据库内XML文件
在数据库表中,其中字段XML所存的为xml格式数据在表xmltest中.那么在使用该表进行报表制作时,需要将存于xml字段中的值读取出来作为报表数据源. XML每条记录数据格式如下: <Fiel ...
- BaseActivity合集
1.出自“高仿京东商城”: package com.itau.jingdong.ui.base; import com.itau.jingdong.AppManager; import com.ita ...
- maven配置以及在eclipse Mars2中的使用
通过1.maven的作用 maven也是一种项目管理工具,主要能够将项目中的jar包移除,通过索引的方式调动本地或者远程仓库中的包,从而实现项目的构建.另一个作用能够应用于大型项目的分模块开发. 2. ...
- Android 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?
service粘性等的那4种方式试了,三星的可以,小米老款手机可以,新款不行,华为新款也不行,还有魅族什么的,都不行,新款的手机上都有一个安全中心,只有在安全中心里面添加上允许app自启动才可以 怎么 ...
- MySQL允许root远程访问
1. mysql -u root -p; // 登录mysql, 并输入密码 2. use mysql; // 打开 mysql 数据库 3. update user ...
- Linux常用命令(三)————创建+删除+设置权限
1. mkdir mkdir [选项] DirName 命令中的[选项]: -m 用于对新建目录设置存取权限,也可以用 chmod 命令进行设置. -p 需要时创建上层文件夹(或目录), ...