商城笔记day04
**
一、添加商品的功能实现
**
请求url:/item/save
参数:表单的数据。使用pojo类型接收。要求pojo属性名和表单input的那么属性名相同。TBItem类。
返回值:使用easyUIResult
EasyUIResult类代码如下
:`import java.util.List;
public class EasyUIResult {
private Integer total;
private List<?> rows;
public EasyUIResult(Integer total, List<?> rows) {
this.total = total;
this.rows = rows;
}
public EasyUIResult(long total, List<?> rows) {
this.total = (int) total;
this.rows = rows;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}`
service层实现
对商品属性的补全:
生成主键策略:使用获取当前时间(精确到毫秒)加上两位随机数。
IDUtils:
import java.util.Random;
public class IDUtils {
/**
* 图片名生成
*/
public static String genImageName() {
//取当前时间的长整形值包含毫秒
long millis = System.currentTimeMillis();
//long millis = System.nanoTime();
//加上三位随机数
Random random = new Random();
int end3 = random.nextInt(999);
//如果不足三位前面补0
String str = millis + String.format("%03d", end3);
return str;
}
/**
* 商品id生成
*/
public static long genItemId() {
//取当前时间的长整形值包含毫秒
long millis = System.currentTimeMillis();
//long millis = System.nanoTime();
//加上两位随机数
Random random = new Random();
int end2 = random.nextInt(99);
//如果不足两位前面补0
String str = millis + String.format("%02d", end2);
long id = new Long(str);
return id;
}
}
编辑商品
请求url:/rest/item/update
和保存商品类似,同理。
删除商品
请求url:/rest/item/delete
请求参数:ids,使用Long[] ids 接收
下架商品
请求url:/rest/item/instock
请求参数:ids,使用Long[] ids 接收
删除商品
请求url: /rest/item/reshelf
请求参数:ids,使用Long[] ids 接收
一、图片服务器FastDFS
要求:
1、存储空间可扩展
2、提供一个统一的访问方式
使用fastDFS,分布式文件系统。存储空间可以横向扩展(内存不够时可以通过添加硬盘或加服务器扩展内存),可以实现服务器的高可用(如果服务器挂了可以使用另一台),支持每个节点有备份机。
二、FastDFS架构
FastDFS架构包括 tracker server 和 storage server。客户端请求Tracker server进行文件上传和文件下载,通过Tracker server 调度storage server最终完成图片上传和图片下载。
Tracker Server的作用是负载均衡和调度,通过tracker server在文件上传时通过一些策略调度Storage server提供文件上传服务,被称为最终服务器或调度服务器。
Storage server作用是文件存储。上传的文件最终存储在storage服务器上,storage server并没有实现自己的文件系统,使用的是操作系统的文件系统来管理文件。被称为存储服务器。
tracker集群和storage集群。
storage集群分为多个组,每个组中并没有主从关系,都是平等的,谁空闲谁干活。
storage会定期的想tracker上传状态信息,告诉storage群现在的状况。
我使用的是最简单的FastDFS结构:tracker server服务器只有一台,并且与storage 安装在同一台服务器上,storage也只有一台,一个组且组里只有一个成员。
2.2图片上传流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
2.3下载文件流程
使用的是最简单的fastDFS架构。
一个trackerServer,storage群只有一个组,组里也只有一个StorageServer。
上传图片功能实现
1、创建一个配置文件,存储trackerServer地址ip端口号。
代码
String url = upload(file.getBytes(),ext);