实现文本与图片同时上传:
首先上传文字内容比较简单,而上传图片的话比较麻烦,这里可以从网上下载commons-fileupload-1.3.1,commons-io-2.4两个jar包,
上传具体实现类代码如下:
public class TombServiceImpl implements TombService { ITombDao tombDao = new TombDao();//创建对象为后面调用dao层方法 //图片等材料上传 @Override public void upload(HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); } catch (Exception e) { e.printStackTrace(); }
//声明其他属性变量 String tombName = null; Double tombPrice = null; String tombSummary = null; //判断本次表单是否是一个multipart表单(带含文件上传) boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { //文件保存路径 String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/"; //相对路径 String path = "/tomb/upload/"; //获取工厂对象 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置缓冲区大小,单位字节 factory.setSizeThreshold(1024 * 4); //产生servlet上传对象 ServletFileUpload uploader = new ServletFileUpload(factory); uploader.setHeaderEncoding("UTF-8"); //设置上传文件的最大大小,位置字节 uploader.setSizeMax(4 * 1024 * 1024); //获取表单项 try { List<FileItem> fileItems = uploader.parseRequest(request); String pictures_url = ""; for (FileItem item : fileItems) { //判断表单项是普通字段还是上传项 if (item.isFormField()) { if ("tombName".equals(item.getFieldName())) { tombName = item.getString("UTF-8"); } else if ("tombPrice".equals(item.getFieldName())) { tombPrice = Double.valueOf(item.getString("UTF-8")); } else { tombSummary = item.getString("UTF-8"); } } else { //上传项目 String fileName = item.getName(); File file = new File(savePath + tombName + "/");//一个用户名下面存放多张图片 if (!file.exists()) { file.mkdirs(); }
//这里保存图片是保存的相对路径,方便其他用户使用
String wirteFile_url = savePath + tombName + "/" + fileName; File wirteFile = new File(wirteFile_url); //写入文件对象 item.write(wirteFile); //如果有多个图片,拼接图片 String picture_url = path + tombName + "/" + fileName; pictures_url += picture_url; pictures_url += ";"; } }
//上传参数 Tomb tomb = new Tomb(); tomb.setTombName(tombName); tomb.setTombPrice(tombPrice); tomb.setTombSummary(tombSummary); tomb.setTombPicture(pictures_url); tombDao.add(tomb); } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
servlet如下:
public class TombUpdateServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { TombService tombService=new TombServiceImpl(); tombService.upload(request,response);//调用上面实现类的方法 } }Dao层方法都很相似,就是相关的增删改查,这里只解释后台操作,是典型的MVC结构(servlet+jsp+JDBC+JavaBean+DAO+Mysql)