SpringMVC框架结合amazeUI前端框架form表单上传多文件和实体
来源:互联网 发布:聚焦网络爬虫 软件 编辑:程序博客网 时间:2024/05/18 03:15
在看这篇博文之前,你应该先搭好SpringMVC框架,并下载amazeUI包,并参见教程配置好,具体参见百度上的教程,教程很多,这里就不多说啦。
下面是表单的信息,其中,图片上传实现了多张图片的上传,并且可以在线预览。
<form class="am-form am-form-horizontal" method="post" id="edit-form" action="<c:url value="/nmgindexintro/save" />"> <input type="hidden" name="branchId" value="${branchId}"> <fieldset> <legend>内蒙古公司展示</legend> <div class="am-g"> <div class="am-u-sm-8"> <div class="am-form-group am-form-select am-g"> <label for="oc-ds-select-1" class="am-u-sm-2 am-form-label" style="font-size:12px;">文章类型</label> <div class="am-u-sm-4 am-u-end"> <select name="type" id="oc-ds-select-1"> <option value="1">风土人情</option> <option value="2">经济概况</option> <option value="3">行业概况</option> </select> </div> </div> <div class="am-form-group am-g"> <label for="doc-ipt-title-1" class="am-u-sm-2 am-form-label" style="font-size:12px;">标题</label> <div class="am-u-sm-4 am-u-end"> <input type="text" id="doc-ipt-title-1" placeholder="输入标题" name="title" > </div> </div> <div class="am-form-group am-form-file am-g"> <label for="doc-ipt-file-2" class="am-u-sm-2 am-form-label" style="font-size:12px;">选择图片</label> <div class="am-u-sm-4 am-u-end"> <button type="button" class="am-btn am-btn-default am-btn-sm"> <i class="am-icon-cloud-upload"></i> 选择图片</button> </div> <input type="file" id="doc-ipt-file-2" name="titleImage" multiple onchange="javascript:setImagePreviews();" accept=".jpg, .png ,.gif , .jpeg"> </div> <div id="file-list"></div> <div class="am-form-group am-form-file am-g"> <label for="doc-ipt-file-3" class="am-u-sm-2 am-form-label" style="font-size:12px;">选择.MP4文件</label> <div class="am-u-sm-4 am-u-end"> <button type="button" class="am-btn am-btn-default am-btn-sm"> <i class="am-icon-cloud-upload"></i> 选择.MP4文件</button> </div> <input type="file" id="doc-ipt-file-3" name="video" accept=".mp4"> </div> <div id="file-list2"></div> </div> <div class="am-u-sm-4" id="preview" style=" width:300px;height:220px;overflow:auto;">预览图片</div> </div> <div class="am-form-group am-form-select am-g"> <fieldset> <legend>公司展示</legend> <input type="hidden" name="id" value="${info.id}"> <script id="container" name="content" type="text/plain" > </script> </fieldset> </div> <div class="am-g"> <p class="am-u-sm-1 am-u-sm-centered"><button type="submit" class="am-btn am-btn-default ">提交</button></p> </div> </fieldset></form><script> $('#doc-ipt-file-2').on('change', function() { var fileNames = ''; $.each(this.files, function() { fileNames += '<span class="am-badge">' + this.name + '</span> '; }); $('#file-list').html(fileNames); }); $('#doc-ipt-file-3').on('change', function() { var fileNames = ''; $.each(this.files, function() { fileNames += '<span class="am-badge">' + this.name + '</span> '; }); $('#file-list2').html(fileNames); }); //图片预览功能 //下面用于多图片上传预览功能 function setImagePreviews(avalue) { //获取选择图片的对象 var docObj = document.getElementById("doc-ipt-file-2"); //后期显示图片区域的对象 var dd = document.getElementById("preview"); dd.innerHTML = ""; //得到所有的图片文件 var fileList = docObj.files; //循环遍历 for (var i = 0; i < fileList.length; i++) { //动态添加html元素 dd.innerHTML += "<div style='float:left' > <img id='img" + i + "' /> </div>"; //获取图片imgi的对象 var imgObjPreview = document.getElementById("img"+i); if (docObj.files && docObj.files[i]) { //火狐下,直接设img属性 imgObjPreview.style.display = 'block'; imgObjPreview.style.width = '200px'; imgObjPreview.style.height = '180px'; //imgObjPreview.src = docObj.files[0].getAsDataURL(); //火狐7以上版本不能用上面的getAsDataURL()方式获取,需要以下方式 imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]); //获取上传图片文件的物理路径 } else { //IE下,使用滤镜 docObj.select(); var imgSrc = document.selection.createRange().text; //alert(imgSrc) var localImagId = document.getElementById("img" + i); //必须设置初始大小 localImagId.style.width = "200px"; localImagId.style.height = "180px"; //图片异常的捕捉,防止用户修改后缀来伪造图片 try { localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)"; localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc; } catch (e) { alert("您上传的图片格式不正确,请重新选择!"); return false; } imgObjPreview.style.display = 'none'; document.selection.empty(); } } return true; }
接下来是后台处理程序
Controller主要是保存图片,并且记下图片的路径并创建唯一名称,传至后台入数据库。
@RequestMapping(value={"/save"}, method=RequestMethod.POST) @ResponseBody public String save(@RequestParam("titleImage") MultipartFile[] titleImage,@RequestParam("video") MultipartFile video,HttpServletRequest servletRequest) throws IOException { List<String> listPicture=new LinkedList<String>(); for(MultipartFile picture : titleImage){ if(picture.isEmpty()){ System.out.println("图片未上传"); }else{ String savePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/static/js/u_editor/jsp/upload/"; String realPath = request.getSession().getServletContext().getRealPath("/static/js/u_editor/jsp/upload"); System.out.println(savePath); System.out.println(realPath); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String str = sdf.format(date)+picture.getOriginalFilename(); //这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉,我是看它的源码才知道的 FileUtils.copyInputStreamToFile(picture.getInputStream(), new File(realPath, str)); listPicture.add(savePath+str); } } String Video=null; if(video.isEmpty()){ System.out.println("视频未上传"); }else{ String savePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/static/js/u_editor/jsp/upload/"; String realPath = request.getSession().getServletContext().getRealPath("/static/js/u_editor/jsp/upload"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String str = sdf.format(date); //这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉,我是看它的源码才知道的 FileUtils.copyInputStreamToFile(video.getInputStream(), new File(realPath, str+video.getOriginalFilename())); Video = savePath+str+video.getOriginalFilename(); System.out.println(Video); } NmgIndexIntroUpdateRequest request =new NmgIndexIntroUpdateRequest(); request.setContent(servletRequest.getParameter("content")); request.setTitle(servletRequest.getParameter("title")); request.setTitleImage(listPicture); request.setVideo(Video); request.setType(servletRequest.getParameter("type")); request.setBranchId(servletRequest.getParameter("branchId")); NmgIndexIntroAccesser accesser = this.accesserFactory.createAccesser(NmgIndexIntroAccesser.class,CurrentUser.getAccessToken()); JSONObject result = new JSONObject(); try{ Response response = accesser.save(request); switch (Status.fromStatusCode(response.getStatus())) { case FOUND: result.put("success", false); result.put("msg", "文章已存在"); break; case OK: String uuid = response.readEntity(String.class); result.put("success", true); result.put("uuid", uuid); result.put("msg", "创建成功"); break; default: result.put("success", false); result.put("msg", "操作失败,请重试。"); break; } return result.toString(); } finally { accesser.close(); } }
Accesser,连接前台与后台的桥梁,通过调用相应的接口,连接后台,并将实体和图片路径入库。
@Override public Response save(NmgIndexIntroUpdateRequest request) { Assert.notNull(this.access_token, "access token required"); String uri = ResteasyWebResourceMap.get("NmgIndexIntroInterface.save"); AccessParameter parameters = new AccessParameter(); parameters.appendQueryParam("access_token", access_token); ResteasyWebTarget target = this.buildJsonTarget(uri, parameters); Response response = target.request().post(Entity.json(request)); return response; }
Interface接口类,连接后台资源。
package com.kinth.admin.server.rest.api.interfaces;import javax.ws.rs.POST;import javax.ws.rs.PUT;import javax.ws.rs.Path;import javax.ws.rs.core.Response;import com.kinth.base.rest.api.entity.NmgIndexIntroListRequest;import com.kinth.base.rest.api.entity.NmgIndexIntroSearch;import com.kinth.security.persistent.entity.NmgIndexIntroUpdateRequest;@Path("admin/nmgindexintro")public interface NmgIndexIntroInterface { /** * 分页查询列表 * @param request * @return */ @POST @Path("search") Response search(NmgIndexIntroSearch request); /** * 更新 * @param * @return */ @PUT @Path("update") Response update(NmgIndexIntroUpdateRequest request); /** * 详情 * @param * @return */ @POST @Path("edit") Response get(Integer id); @POST @Path("list") Response list(NmgIndexIntroListRequest request); @POST @Path("save") Response save(NmgIndexIntroUpdateRequest request);}
Resourse连接底层DAO层,将实体和图片,视频路径入库。
@Override public Response save(NmgIndexIntroUpdateRequest request) { NmgIndexIntro nmg= NmgIndexIntroDao.findBybranchIdAndType(request.getBranchId(), request.getType()); if(nmg != null) { return Response.status(Status.FOUND) .entity(new ErrorResponse("文章已存在", "文章已存在")) .build(); } NmgIndexIntro nii=new NmgIndexIntro(); nii.setBranchId(request.getBranchId()); nii.setContent(request.getContent()); nii.setCreateTime(new Date()); nii.setStatus("1"); nii.setTitle(request.getTitle()); if(request.getTitleImage()!=null){ String titleImage=""; for(String s:request.getTitleImage()){ titleImage+=s; titleImage+=","; } nii.setTitleImage(titleImage); } nii.setType(request.getType()); if(request.getVideo()!=""){ nii.setVideo(request.getVideo()); } nii.setShortContent(request.getTitle()+request.getTitleImage()); this.NmgIndexIntroDao.saveAndFlush(nii); return Response.ok().build(); }
DAO层
package com.kinth.security.persistent.dao;import com.kinth.base.persistent.BaseDAO;import com.kinth.security.persistent.entity.NmgIndexIntro;public interface NmgIndexIntroDAO extends BaseDAO<NmgIndexIntro, Integer>{ NmgIndexIntro findBybranchId(String branchId); NmgIndexIntro findById(Integer id); NmgIndexIntro findBybranchIdAndId(String branchId,Integer id); NmgIndexIntro findBybranchIdAndType(String brandId,String Type);}
实体entity
package com.kinth.security.persistent.entity;import java.io.Serializable;import javax.persistence.*;import java.util.Date;/** * The persistent class for the nmg_index_intro database table. * */@Entity@Table(name="nmg_index_intro")@NamedQuery(name="NmgIndexIntro.findAll", query="SELECT n FROM NmgIndexIntro n")public class NmgIndexIntro implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String branchId; private String content; private Date createTime; private String shortContent; private String status; private String title; private String titleImage; private String type; private String video; public NmgIndexIntro() { } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name="branch_id") public String getBranchId() { return this.branchId; } public void setBranchId(String branchId) { this.branchId = branchId; } @Lob public String getContent() { return this.content; } public void setContent(String content) { this.content = content; } @Temporal(TemporalType.TIMESTAMP) @Column(name="create_time") public Date getCreateTime() { return this.createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @Lob @Column(name="short_content") public String getShortContent() { return this.shortContent; } public void setShortContent(String shortContent) { this.shortContent = shortContent; } public String getStatus() { return this.status; } public void setStatus(String status) { this.status = status; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } @Column(name="title_image") public String getTitleImage() { return this.titleImage; } public void setTitleImage(String titleImage) { this.titleImage = titleImage; } public String getType() { return this.type; } public void setType(String type) { this.type = type; } @Column(name="video") public String getVideo() { return this.video; } public void setVideo(String video) { this.video = video; }}
阅读全文
1 0
- SpringMVC框架结合amazeUI前端框架form表单上传多文件和实体
- springmvc结合jquery.form.js异步提交表单上传文件
- SpringMVC form表单 上传多个文件
- 上传文件(ajax结合form表单)
- SpringMVC form表单 上传一个文件
- SpringMVC框架上传表单时怎么将表单数据与实体对象绑定,然后在控制器中调用
- springMVC框架的文件上传
- SpringMVC框架之文件上传
- form表单多文件上传
- ajax上传form表单或者文件以及结合validate验证
- html基础知识:form表单和框架
- SpringMVC框架实现文件、资源的上传和下载
- 在SpringMVC框架中实现文件上传和下载
- Jfinal框架下结合ajaxFileupload实现多文件上传
- Jfinal框架下结合ajaxFileupload实现多文件上传
- AmazeUI的JS表单验证框架实战分享
- amazeui/bootstrap框架及前端相关的知识概要!
- Form表单多文件上传(H5和Android && Java后台)
- scala之继承
- lk启动流程详细分析(高通)
- 多线程
- C++多态&多态模型
- vim 使用技巧
- SpringMVC框架结合amazeUI前端框架form表单上传多文件和实体
- ssh实现免密码远程登录
- 怎么查看电脑配置|win7查看电脑配置教程
- QMQY
- Centos7搭建代理服务器Shadowsocks
- 对数换底公式的证明
- 这50款必看医疗APP 或许就是下一个风口 (上)
- Luogu P1373 小a和uim之大逃离
- 北京上网首选DNS服务器地址,北京最快的DNS服务器地址,北京DNS大全