数据库

配置数据库连接(修改application-dev.yml文件)

url: jdbc:mysql://127.0.0.1:3306/fastposter?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
username: fastposter
password: 123456

导入数据库脚本 db/fastposter-pro.sql

mysql -u fastposter -p"123456" --default-character-set=utf8mb4 fastposter < db/fastposter-pro.sql

开发测试 启动后端

运行FastposterApplication

修改展示域名application.yml 对应uri-prefix

fastposter:
  uri-prefix: https://xxxxxxx

开发测试 前端打包

推荐使用node v14+
安装依赖npm i
本地预览npm run serve
打包npm run build
打包后将dist目录中数据替换server/src/main/resources/static中文件

自定义字体

fonts目录下新建一个字体目录,将字体文件拷贝到改目录下,并执行sql脚本,增加对应的字体。
推荐使用woff格式字体,其他格式,占用空间比较大 不同格式占用空间大小ttf > otf > woff

INSERT INTO `fp_fonts` (`name`, `code`) VALUES ('阿里巴巴普惠体-Light', '738012dc4ddedcea.woff');

云存储配置

编辑application.yml,修改相关配置

腾讯云
cos:
  secretId: 9HzfR0SJ7IxopM5N
  secretKey: MqcQViakh5jnx4ub
  region: ap-shanghai
  bucket: demo-51427683
  uri: https://demo-51427683.cos.ap-shanghai.myqcloud.com/
阿里云
oss:
  accessKeyId: rlNP4FSepWd0XsEi
  accessKeySecret: I1LGTsieSu7gcVyM3BRWxQtAz4mpw6bj
  region: oss-cn-shanghai
  bucket: demo
  endpoint: oss-cn-shanghai.aliyuncs.com
  uri: https://demo.oss-cn-shanghai.aliyuncs.com/
七牛云
kodo:
  accessKey: 9HzfR0SJ7IxopM5N
  secretKey: MqcQViakh5jnx4ub9HzfR0SJ7IxopM5N
  bucket: fastposter
  uri: http://raqr9pxxv.hn-bkt.clouddn.com/
Minio
minio:
  accessKey: root
  secretKey: e27WQc4fROrXAGFC
  bucket: demo
  endpoint: http://127.0.0.1:9000
  uri: http://127.0.0.1:9000/
本地存储
fastposter:
  data-path: ${user.dir}/data/

单节点运行

如果需要使用生产环境prod配置,请添加-Dspring.profiles.active=prod参数即可

java -jar -server \
  -Xms512m -Xmx512m \
  -Dfile.encoding=UTF-8 \
  -XX:+HeapDumpOnOutOfMemoryError \
  fastposter-pro.jar

如果需要后台运行,使用如下脚本

nohup nice java -jar -server \
  -Xms512m -Xmx512m \
  -Dfile.encoding=UTF-8 \
  -XX:+HeapDumpOnOutOfMemoryError \
  fastposter-pro.jar > fastposter-pro.log 2>&1 &

多节点

启动多个fastposter服务,需要配置一下端口,通过-Dserver.port=5002参数即可
启动第一个节点

nohup nice java -jar -server \
  -Xms512m -Xmx512m \
  -Dserver.port=5001 \
  -Dfile.encoding=UTF-8 \
  -XX:+HeapDumpOnOutOfMemoryError \
  fastposter-pro.jar > fastposter-pro-5001.log 2>&1 &

启动第二个节点

nohup nice java -jar -server \
  -Xms512m -Xmx512m \
  -Dserver.port=5002 \
  -Dfile.encoding=UTF-8 \
  -XX:+HeapDumpOnOutOfMemoryError \
  fastposter-pro.jar > fastposter-pro-5002.log 2>&1 &

负载均衡可使用nginx的upstream,示例

server {

    listen       80;
    server_name  sitename.com;
    access_log /var/log/nginx/sitename.com.log;

    client_max_body_size 30m;
    
    upstream fastposters {
        server 127.0.0.1:5001;
        server 127.0.0.1:5002;
    }

    location / {
        index   index.html ;
        proxy_pass      http://fastposters;
        proxy_set_header   Host    $host;
        proxy_set_header   X-Real-IP   $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   REMOTE-HOST $remote_addr;
    }

}

元数据JSON

{
  "h": 1334,	// 高度
  "w": 750,		// 宽度
  "id": 19,		// ID
  "bgc": "#fafbfc",  // 背景色
  "use": "bgUrl",		 // 使用背景图还是背景色
  "name": "分享海报-副本",	// 海报名称
  "type": "jpeg",		// 类型 可选值:(jpeg|png|webp)
  "bgUrl": "store/upload/20220309/f9fc2046806797ac.png",	// 背景图地址
  "items": [				// 海报元素列表
    {
      "c": "#000000",		// 前景色
      "h": 240,		// 高度
      "p": 0,			// 二维码宽度(预留)
      "s": 30,		// 大小
      "t": "qrcode",	// 类型 可选值:(qrcode|text|img|avatar)
      "v": "https://poster.prodapi.cn/pro/",	// 参数默认值
      "w": 240,		// 宽度
      "x": 258,		// 位置:x
      "y": 916,		// 位置:y
      "z": 1,			// 图层(忽略)
      "fn": "",		// 字体
      "st": 0,		// 忽略
      "vd": "qrcode",		// 参数名称
      "bgc": "#ffffff",	// 背景色
      "lock": false,		// 是否锁定(忽略)
      "name": "二维码",	// 参数备注(忽略)
      "uuid": "DMofujOF",		// UUID(忽略)
      "active": false		// 是否激活(忽略)
    }
  ],
  "scale": 0.5,		// 编辑器缩放比(预览可忽略)
  "preview": "store/preview/20220316/2054a4052bafc8c6.jpeg",		// 预览地址 (忽略)
  "quality": 80		// 图像质量, 只有jpeg,webp格式时生效
}

获取海报

调用服务端的/api/link接口,即可返回海报的访问地址
返回海报地址

{
  "code": 0,
  "msg": "success",
  "data": {
    "url": "http://127.0.0.1:5000/v/e670a0b84209a7d9"
  }
} 

访问资源

查看资源: 可用于直接访问如img标签、css样式等 /v/uuid.(png|jpg|jpeg|pdf|webp)

目前海报支持的图片格式有jpeg png webp,默认使用的是jpeg
在一些使用场景中,需要服务端直接返回图片的base64编码,只需将图片后缀改成.b64即可,例:http://127.0.0.1:5000/v/e670a0b84209a7d9.b64
在一些使用场景中(如授权书、奖状、证书的生成)需要能够支持 pdf 格式,只需将图片后缀改成.pdf即可,例:http://127.0.0.1:5000/v/e670a0b84209a7d9.pdf

下载资源: 使用UUID作为文件名

/d/uuid.(png|jpg|jpeg|pdf|webp) 例: http://127.0.0.1:5000/d/5b2bea6e9b57a2a5

下载资源: 使用海报名称作为文件名

/dn/uuid.(png|jpg|jpeg|pdf|webp) 例:http://127.0.0.1:5000/dn/5b2bea6e9b57a2a5.jpg