您的位置:首页 > 其它

易生活(一)-web---商品上传、smartupload使用、虚拟路径

2016-04-16 20:28 295 查看

目录

上传商品业务逻辑分析

SmartUpload上传文件逻辑处理以及注意事项

如何配置虚拟文件存储路径

该部分源码,不包括调用的其它层代码。

上传商品业务逻辑分析

核心逻辑

/*
* 上传商品所有逻辑:
* 第一步:点击添加商品按钮,携带过来商家ID、商家产品的商品所属的全部三级分类信息。
* 第二步:提交之后,初始化第三方文件上传框架SmartUpload,为获取普通表单数据做准备。注意,获取普通表单数据不能使用传统方式,在smartUpload.upload()之后,用该框架提供的方法获取表单数据。
* 第三步:上传文件。
* 第四步:获取商品表单基本信息之后插入商品表,返回插入商品的id
* 第五步:遍历存储分类ID和返回的商品ID插入到三级分类中间表。
* 第六步:遍历获取到的商品图片路径和商品ID存储到商品图片表。
*/


SmartUpload上传文件逻辑处理以及注意事项

逻辑处理

// 第二步,初始化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();
}
}


注意事项

上传文件不能使用普通的方式获取表单数据,可以使用smartupload提供的方法获取。特别注意,必须在smartUpload.upload();之后才可以通过smartUpload.getRequest().getParameterNames();获取普通表单参数列表。

上传文件之前必须判断文件夹是否存在,不存在创建。(if (!file.exists())…)

当用户上传的照片数量少于我们设定的照片数量时,需要处理,不然会报下标越界,原因很容易分析出来。(if (smartUpload.getFiles().getFile(i).getSize() == 0)continue;)

注意编码问题,SmartUpload对于上传的文件名只支持GBK编码,如果有中文,需要特别注意。可以使用修改过该组件的以支持其它编码。

对于文件名,为了避免重名,采用当前时间加后缀的方式命名。注意截取字符串问题。

如何配置虚拟文件存储路径

需求

项目名:elife

我们项目需要把图片保存到D盘save文件夹。当然,save内部还可能包括多层。

需要保证文件上传到该根目录。数据库保存的图片可以在浏览器读取出来。

实现

在tomcat的server.xml的节点下配置(问号换成“>”)

<Context path="/elife/save" docBase="D:\save" reloadable="false"/?


在服务端设置保存路径,根目录设置为“/save”,内部文件夹不要求。

保存路径是,需要将“/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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: