关于文件和图片上传
- 需要在form表单中配置enctype="multipart/form-data"
- 表单中关于上传文件的input域name属性不能和实体类中的对应文件路径的属性名一样。
- 在控制层(controller)中要用到Mulitpart类
4.Form表单中控制文件上传的input域应该与MultipartFile声明的对象名字(上面的file)一样
例如:
在form表单中实现文件上传组件的input域中name=”file”
而在实体类中(数据库中)负责存储文件路径的是boxorder属性
是为什么呢?
因为,你的控制文件上传的input域中是要实现一个MultipartFile类型的数据,这个数据应该传递给MulitpartFile类型的file参数,所以input中的name属性因该与声明的MultipartFile类型的参数名一致,而对于selfbox对象中没有传入boxorder的值,这样我们可以在程序中用boxorder的set方法设置orderbox的值,让他是图片的途径+图片名,这样就可以实现将文件传入服务器中,数据库中只保留文件路径
下面附上完整代码:
Model:
public class Selfbox { private String id; private String phone; private String linkman; private String yardadress; private String self_city; public Integer getCheck_height() { return check_height; } public void setCheck_height(Integer check_height) { this.check_height = check_height; } public String getSelf_city() { return self_city; } public void setSelf_city(String self_city) { this.self_city = self_city; } public Integer getClass_east_west() { return class_east_west; } public void setClass_east_west(Integer class_east_west) { this.class_east_west = class_east_west; } private String boxorder; private String arrage_id; private Integer flag; private Integer check_height; private Integer class_east_west; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getLinkman() { return linkman; } public void setLinkman(String linkman) { this.linkman = linkman; } public String getYardadress() { return yardadress; } public void setYardadress(String yardadress) { this.yardadress = yardadress; } public String getBoxorder() { return boxorder; } public void setBoxorder(String boxorder) { this.boxorder = boxorder; } public String getArrage_id() { return arrage_id; } public void setArrage_id(String arrage_id) { this.arrage_id = arrage_id; } public Integer getFlag() { return flag; } public void setFlag(Integer flag) { this.flag = flag; }
Controller层:
@Controller @RequestMapping("/selfbox") public class SelfboxController { @Autowired private SelfboxService selfboxService; public SelfboxService getSelfboxService() { return selfboxService; } public void setSelfboxService(SelfboxService selfboxService) { this.selfboxService = selfboxService; } @Value("#{sysconfig['file.folder']}") private String fileFolder; @RequestMapping(value="/insertbox") @ResponseBody public MyResult insertbox( MultipartFile file,Selfbox selfbox,HttpServletRequest request) throws IOException{ try { selfbox.setId(UUID.randomUUID().toString()); if(!file.isEmpty()) { //上传文件 //上传地址 String path = request.getSession().getServletContext().getRealPath("/file"); //获取文件名 String boxorder_name = file.getOriginalFilename(); //获取文件的后缀名 String extensionName = boxorder_name.substring(boxorder_name.lastIndexOf(".")+1); //获得id String id = selfbox.getId(); //设置文件上传后的名称 String newfile = id+"."+extensionName; //文件的传输保存 file.transferTo(new File(fileFolder + "/pdf/returnNote/"+newfile)); //把文件路径保存到数据库 selfbox.setBoxorder(newfile); } selfboxService.insertSelfbox(selfbox); return new MyResult(1, "已成功添加箱安排!"); } catch (RuntimeException e) { return new MyResult(0, "添加箱安排失败!"); } }
Form表单
<form id="ZIBEI_form" method="post" enctype="multipart/form-data"> <input name="class_east_west" type="hidden"> <input name="arrage_id" type="hidden" /> <table style="padding:10px;"> <tr> <td align="right" style="70px">箱型箱量:</td> <td><span class="containerTypeAndQuantity"></span></td> <td colspan="3"><label>TEUs:</label> <span class="needsTeus" style="color:red" ></span>/<span class="destTeus"></span> </td> </tr> <tr><td colspan="4"><hr/></td></tr> <tr> <td align="right">空重箱:</td> <td colspan="3"> <input type="radio" name="check_height" value="0" checked="checked" style="20px;" checked /><label>空</label> <input type="radio" name="check_height" value="1" style="20px;" /><label>重</label> </td> </tr> <tr> <td align="right">自备箱箱型:</td> <td ><input id="ZIBEI_containerType" name="containerTypeCode" data-options="min:1" /></td> <td align="right">自备箱数量:</td> <td colspan="1"> <input id="ZIBEI_quantity" name="quantity" class="easyui-numberspinner" data-options="min:1" style="50px;"/> <span class="quotaTeus" style="margin-left:10px;"></span> </td> </tr> <tr><td colspan="4"><hr/></td></tr> <tr style="margin-top:10px;" id="txcs"> <td align="right" id="city">提箱城市:</td> <td><input id="self_city" name="self_city" ></td> </tr> <tr style="margin-top:10px;" id="txdznr"> <td align="right" id="txdztext">提箱堆场地址:</td> <td><input id="yardadress" name="yardadress" ></td> </tr> <tr> <td align="right" id="flag">是否有还箱指令:</td> <td colspan="3"> <input type="radio" name="flag" value="0" checked="checked" style="20px;" checked /><label>否</label> <input type="radio" name="flag" value="1" style="20px;" /><label>是</label> </td> </tr> <tr id="txdnr"> <td align="right" id="txdtext">提箱单:</td> <td> <input class="easyui-filebox" id="txd" name="file" data-options="prompt:'请选择文件'" style="100%"> </td> </tr> <tr> <td align="right">联系人:</td> <td><input class="easyui-textbox" id="dclxr" name="linkman"></td> </tr> <tr> <td align="right">电话:</td> <td> <input class="easyui-textbox" id="bgdh" name="phone"> </td> </tr> <tr><td colspan="4"> </tr> </table> </form> </div>
Form表单是利用easyui和ajax提交的,我也不是太会,等以后会了再说吧