图床服务(picture hosting service,不是 “picture bed” 吼),是web服务中常见常用的服务。其功能在于允许用户将图片放在服务器上并提供公开可访问的链接。
有了上一节(【Node.js】使用Multer的文件上传下载)的铺垫,这一节就来小试牛刀,制作一个简易的仅支持上传和浏览的图床应用了
需求分析
首先,提供上传图片的接口。在上传图片后,需要返回给用户图片的url以便于用户的访问。
简单起见,我们约定,所有图片都存放在项目根目录下的imgs
文件夹中,url中格式为/img/图片名
前缀的请求即表示获取相应图片
对于上传文件,设计两个接口:
- 上传单张图片,随机生成名称,返回url路径(
/upload/singleImage
) - 同一上传多张图片,最多不超过9张,随机名称,返回成功存储图片信息列表,包含其url路径(
/upload/multiImages
)
对所有的图片要求:
- 大小不能超过20K( 20 × 1024 = 20480 20 \times 1024=20480 20×1024=20480字节)
- 格式必须为以下几种之一,不区分大小写:
– jpg
– jpeg
– gif
– png
– webp
– bmp - 转存结束后要删除缓存
浏览
在实现上传功能之前,有必要先将浏览图片的功能配置好,以便于测试使用。
var express = require('express')
var app = express()
//路由为/img的请求映射到./imgs文件夹下的静态文件
app.use('/img',express.static('./imgs'))
上传
完整代码如下:
var express = require('express')
var multer = require('multer')
var fs = require('fs')
var app = express()
var upload = multer({
//设置文件缓存地址
dest:'./temp'
})
/* 全局常量 */
const HOST = 'localhost' //服务器地址
const PORT = 8080 //端口号
const SUFFIXES = {
//合法后缀
png:true,
jpg:true,
jpeg:true,
bmp:true,
webp:true,
gif:true
}
const MAX_SIZE = 20480 //文件大小上限
const IMAGE_URL = 'img' //图片url前缀
const IMAGE_DIRECTORY = './imgs' //本地保存图片路径
app.use('/img',express.static('./imgs')) //配置静态资源
/* 工具方法 */
//校验后缀
function checkSuffix(suffix){
return SUFFIXES[suffix]
}
//校验文件大小
function checkSize(size){