核心逻辑
/*
* 上传商品所有逻辑:
* 第一步:点击添加商品按钮,携带过来商家ID、商家产品的商品所属的全部三级分类信息。
* 第二步:提交之后,初始化第三方文件上传框架SmartUpload,为获取普通表单数据做准备。注意,获取普通表单数据不能使用传统方式,在smartUpload.upload()之后,用该框架提供的方法获取表单数据。
* 第三步:上传文件。
* 第四步:获取商品表单基本信息之后插入商品表,返回插入商品的id
* 第五步:遍历存储分类ID和返回的商品ID插入到三级分类中间表。
* 第六步:遍历获取到的商品图片路径和商品ID存储到商品图片表。
*/
逻辑处理
// 第二步,初始化SmartUpload
SmartUpload smartUpload = new SmartUpload();
smartUpload.initialize(config, req, resp);
try {
smartUpload.upload();// 此步操作之后才可以获取普通表单参数
} catch (SmartUploadException e) {
e.printStackTrace();
}
Map<String, String> parameterMap = new HashMap<String, String>();
@SuppressWarnings("rawtypes")
Enumeration em = smartUpload.getRequest()
.getParameterNames();
/*
* 这一块处理获取普通表单, 存储到Map中然后用beanutils进行封装
*/
while (em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = smartUpload.getRequest().getParameter(key);
parameterMap.put(key, value);
}
BeanUtils.populate(goods, parameterMap);// 我们在这里获取自己封装的数据
String[] threeclassid = smartUpload.getRequest()
.getParameterValues("threeclassid");// 获取分类列表ID
// 第三步:上传文件
String dir = ParamUtils.SAVEPATP + ParamUtils.SAVEPATP_GOODS;
File file = new File(dir);
if (!file.exists()) {
file.mkdirs();// 文件夹不存在,创建
}
for (int i = 0; i < smartUpload.getFiles().getCount(); i++) {
// 用户上传少于四张时处理
if (smartUpload.getFiles().getFile(i).getSize() == 0)
continue;
Goodsimg goodsimg = new Goodsimg();// 存放商品图片路径
com.jspsmart.upload.File myFile = smartUpload.getFiles()
.getFile(i);
String fileName = myFile.getFileName();
long currentTimeMillis = System.currentTimeMillis();
String saveName = currentTimeMillis
+ fileName.substring(fileName.lastIndexOf("."));
String saveFullPath = dir + saveName;
goodsimg.setImgaddress(saveFullPath.substring(1));
goodsimgs.add(goodsimg);// 保存路径
try {
smartUpload.getFiles().getFile(i).saveAs(saveFullPath);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注意事项
需求
实现
在tomcat的server.xml的节点下配置(问号换成“>”)
<Context path="/elife/save" docBase="D:\save" reloadable="false"/?
在服务端设置保存路径,根目录设置为“/save”,内部文件夹不要求。
/*
* 添加商品
*/
/*
* 上传商品所有逻辑:
* 第一步:点击添加商品按钮,携带过来商家ID、商家产品的商品所属的全部三级分类信息。
* 第二步:提交之后,初始化第三方文件上传框架SmartUpload,为获取普通表单数据做准备。注意,获取普通表单数据不能使用传统方式,在smartUpload.upload()之后,用该框架提供的方法获取表单数据。
* 第三步:上传文件。
* 第四步:获取商品表单基本信息之后插入商品表,返回插入商品的id
* 第五步:遍历存储分类ID和返回的商品ID插入到三级分类中间表。
* 第六步:遍历获取到的商品图片路径和商品ID存储到商品图片表。
*/
List<Goodsimg> goodsimgs = new ArrayList<Goodsimg>();// 商品图片列表
Goods goods = new Goods();// 商品
try {
// 第二步,初始化SmartUpload
SmartUpload smartUpload = new SmartUpload();
smartUpload.initialize(config, req, resp);
try {
smartUpload.upload();// 此步操作之后才可以获取普通表单参数
} catch (SmartUploadException e) {
e.printStackTrace();
}
Map<String, String> parameterMap = new HashMap<String, String>();
@SuppressWarnings("rawtypes")
Enumeration em = smartUpload.getRequest()
.getParameterNames();
/*
* 这一块处理获取普通表单, 存储到Map中然后用beanutils进行封装
*/
while (em.hasMoreElements()) {
String key = (String) em.nextElement();
String value = smartUpload.getRequest().getParameter(key);
parameterMap.put(key, value);
}
BeanUtils.populate(goods, parameterMap);// 我们在这里获取自己封装的数据
String[] threeclassid = smartUpload.getRequest()
.getParameterValues("threeclassid");// 获取分类列表ID
System.out.println(TAG + "测试打印goods:" + goods);
System.out.println(TAG + ":测试打印分类列表:"
+ Arrays.toString(threeclassid));
// 第三步:上传文件
String dir = ParamUtils.SAVEPATP + ParamUtils.SAVEPATP_GOODS;
File file = new File(dir);
if (!file.exists()) {
file.mkdirs();// 文件夹不存在,创建
}
for (int i = 0; i < smartUpload.getFiles().getCount(); i++) {
// 用户上传少于四张时处理
if (smartUpload.getFiles().getFile(i).getSize() == 0)
continue;
Goodsimg goodsimg = new Goodsimg();// 存放商品图片路径
com.jspsmart.upload.File myFile = smartUpload.getFiles()
.getFile(i);
String fileName = myFile.getFileName();
long currentTimeMillis = System.currentTimeMillis();
String saveName = currentTimeMillis
+ fileName.substring(fileName.lastIndexOf("."));
String saveFullPath = dir + saveName;
goodsimg.setImgaddress(saveFullPath.substring(1));
goodsimgs.add(goodsimg);// 保存路径
try {
smartUpload.getFiles().getFile(i).saveAs(saveFullPath);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(TAG + "文件已上传");
// 第四步:添加商品到商品表,返回ID
int returnId = goodsService.addGoods(goods);
System.out.println(TAG + "商品id" + returnId);
if (returnId != -1) {
goods.setId(returnId);// 获取返回的商品id
} else {
System.out.println(TAG + "上传商品失败");
}
// 第五步:根据获取到商品id,保存三级分类中间表
for (int i = 0; i < threeclassid.length; i++) {
Goodsclass goodsclass = new Goodsclass();
goodsclass.setClassthreeid(Integer
.parseInt(threeclassid[i]));
goodsclass.setGoodsid(goods.getId());
boolean isAdd = goodsService.addGoodsClass(goodsclass);
if (isAdd) {
System.out.println(TAG + ":" + "添加三级分类中间表成功");
} else {
System.out.println(TAG + ":" + "添加三级分类中间表失败");
}
goodsclass = null;// 释放资源
}
// 第六步,保存商品图片到商品图片表
for (Goodsimg gs : goodsimgs) {
gs.setGoodsid(returnId);// 保存商品id
boolean isAdd = goodsService.addGoodsImg(gs);
if (isAdd) {
System.out.println(TAG + "添加商品图片表成功!");
} else {
System.out.println(TAG + "添加商品图片表失败");
}
}
goodsimgs = null;// 释放内存
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(TAG + ":测试打印数据:" + goods);