@RequestMapping(value = "/add", produces = "text/plain;charset=UTF-8")
public ModelAndView AddBrands(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelMap map = new ModelMap();
try {
//表单元素名
String[] formElements = { "bName", "bRemark" };
//获取表单元素
Map<String, Object> elementsValues = FileUpload.getFormElements(request, formElements);
//上传结果
Map<String, Object> values = null;
//实体
Brands brands = new Brands();
//判断表单元素是否为空 msg 存储错误信息
if (null != elementsValues.keySet() && null != elementsValues.get("msg")) {
map.addAttribute("msg", EncodingTools.encodeStr(elementsValues.get("msg").toString()));
} else {
//实体赋值
brands.setbName(elementsValues.containsKey("bName") ? elementsValues.get("bName").toString() : "");
brands.setbRemark(elementsValues.containsKey("bRemark") ? elementsValues.get("bRemark").toString() : "");
//保存实体成功 mybatis 返回成功的ID
if (0 < brandsService.addBrands(brands) && null != brands.getbId() && 0 != brands.getbId()) {
//拼接路径
StringBuffer filePath = new StringBuffer(request.getSession().getServletContext().getRealPath("\\"));
filePath.append("upload\\image\\logo\\");
//因为这里的路径需要保存成功的实体ID
filePath.append(brands.getbId() + "\\");
String[] fileType = { "image/png" };
//取出读出表单时存储的FileItem
FileItem item = (FileItem) elementsValues.get("item");
//上传图片
values = FileUpload.uploadFile(item, 1, fileType, filePath.toString());
//判断上传是否成功
if (null != values.keySet() && null == values.get("msg")) {
//得到上传成功后的文件名// 这可以减少一个判断 在页面多加一个input 存储表单类型 生成名称 先保存 再上传
String fileName = values.get("fileName").toString();
brands.setbIconPath(fileName);
//更新
if(0 < brandsService.editBrands(brands)){
//成功
}else{
//失败
}
} else if (null != values.get("msg")) {
map.addAttribute("msg", EncodingTools.encodeStr("上传图片失败!"));
}
map.addAttribute("msg", EncodingTools.encodeStr("添加成功!"));
//return new ModelAndView("redirect:/brands/findAll", map);
} else {
map.addAttribute("msg", EncodingTools.encodeStr("插入数据失败!"));
}
}
} catch (Exception e) {
e.printStackTrace();
map.addAttribute("msg", EncodingTools.encodeStr("上传文件失败!"));
}
return new ModelAndView("redirect:/view/admin/brands/add_brands.jsp",
map);
}
看你的代码,代码分支还是很明确的,就是判断上传代码是否成功这段比较长,建议把第一个if的方法体的内容抽离成一个私有方法,那么你的if逻辑块就相对清晰多了。而且抽离的部分代码量也不大,只是都放一块导致你的if操作可读性变差了。
感觉代码有点乱,看不太明白
好复杂的做法,并且发现个小问题,那个保存的路径,在linux服务下跑应该会出问题。我建议if语句不要过多嵌套,不然可读性很差。
才4层而已 不过看起来确实不过直观 可以重构把 //保存实体成功 mybatis 返回成功的ID里面的代码 拆成一个方法去调用 这样避免了一个方法过于冗长
每个if else 单独作为method进行执行,代码层次太强的话容易缺乏可读性。
spring有自带图片获取后outputstream 不需要你这么麻烦参考我的部分代码
@RequestMapping
protected void doPost(HttpServletRequest request, HttpServletResponse response
,@RequestParam("topphone") Object topphone) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
Children model=new Children();
if(!topphone.equals(""))
{
String path=commonService.Getvalue("topphonepath");
File file=new File(path);
if(!file.exists())
{
file.createNewFile();
}
String suffix=((MultipartFile)topphone).getOriginalFilename().substring(((MultipartFile)topphone).getOriginalFilename().indexOf("."));
String name=md5Service.GetMD5Code(((MultipartFile)topphone).getOriginalFilename());
//图片上传输出方法
((MultipartFile)topphone).transferTo(new File(path+"/"+name+suffix));
model.setTopphone(name+suffix);
}
什么叫嵌套过多,你的具体的问题是什么呢?