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 ...
随机推荐
- AngularJS - Directive Restrictions
While it’s cool to make a custom element like we did the the previous cast, it’s actually more commo ...
- JS cookie 设置 查看 删除
JScookie 常用的3个预设函数(库) <!DOCTYPE HTML> <html> <head> <meta charset="utf-8&q ...
- SPARK - Execute Framework
Spark函数详解系列之RDD基本转换 https://www.cnblogs.com/MOBIN/p/5373256.html The RDD provides low level API for ...
- SpringBoot整合mybatis踩坑
springboot整合mybaits过程中,调用接口时报错:org.apache.ibatis.binding.BindingException: Invalid bound statement ( ...
- MUI框架-11-MUI前端 +php后台接入百度文字识别API
MUI框架-11-MUI前端 +php后台接入百度文字识别API 这里后台不止一种,Python,Java,PHP,Node,C++,C# 都可以 这里使用的是 php 来介绍,已经解决所有问题,因为 ...
- PRML读书笔记——线性回归模型(上)
本章开始学习第一个有监督学习模型--线性回归模型."线性"在这里的含义仅限定了模型必须是参数的线性函数.而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数. ...
- TF-IDF与余弦相似性的应用:找出相似文章
"找出相似文章"的一种算法: 利用TF-IDF算法,找出两篇文章的关键词. 每篇文章若干个关键词的相对词频. 生成两篇文章各自的词频向量. 计算两个向量的余弦相似度,值越大就表示越 ...
- pmp证书
- 使用mathjax在博客中完美显示数学公式,支持PC,手机浏览器
在博客园的设置选项里 有页头HTML的框内输入: <script type="text/javascript" src="http://cdn.mathjax.or ...
- sort 、sorted、range、join方法 数字的正序、倒叙、翻转
大家可以想象一下 如果一串数字 是混乱的没有顺序这个时候你想要排序怎么办呢? 这个时候顺势而生的就有了sort方法 把数字从大到小的排列----->sort() 只对列表 li = [3, 5 ...