文件的上传和下载
用JFinal方式的
html页面获取文件 需要有属性enctype="multipart/from-data" 后台需要通过gitFile的方法才能解析出来request里面的内容,参数和数据。
想要保存文件到服务器端并且保存到数据库,需要分为两步
1.先把文件保存在服务器端 WebRoot/upload下面:
string url=getWebRootPath()+"\\upload\\"+"自己定义的文件名字"
File filePath = new File(url);//先在根目录下面创建文件夹
Map<String, Object> map = UploadUtils.getFile(request, response, dirpath);//其中的request和response可以不要的 只要一个文件的路径就行
下面是对应的工具类的方法;
File uploadFile = new File(url); if (!uploadFile.exists()) { //如果目标路径不存在新建一个 id file uploadFile.mkdirs(); }
boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { DiskFileItemFactory factory = new DiskFileItemFactory(); // 指定在内存中缓存数据大小,单位为byte,这里设为1Mb factory.setSizeThreshold(1024 * 1024); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 factory.setRepository(new File("D:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // 指定单个上传文件的最大尺寸,单位:字节,这里设为50Mb upload.setFileSizeMax(50 * 1024 * 1024); // 指定一次上传多个文件的总尺寸,单位:字节,这里设为50Mb upload.setSizeMax(50 * 1024 * 1024); upload.setHeaderEncoding("UTF-8"); List<FileItem> items = null; try { // 解析request请求 items = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } if (items != null) { // 解析表单项目 Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); // 如果是普通表单属性 if (item.isFormField()) { // 相当于input的name属性 <input type="text" name="content"> String name = item.getFieldName(); // input的value属性 String value = item.getString(); // System.out.println("属性:" + name + " 属性值:" + value); if("uid".equals(name)){ String p_id = value; map.put("p_id", p_id); }else if("remark".equals(name)){ String remark = value; map.put("remark", remark); }else if("fileName".equals(name)){ String fileName = value; map.put("fileName", fileName); } } // 如果是上传文件 else { // 属性名 Long fieldSize = item.getSize(); // 上传文件名称 String fileName=(String) map.get("fileName"); fileName = fileName.substring(fileName.lastIndexOf("/") + 1);// 获得上传文件的文件名 map.put("fieldSize", fieldSize); try { item.write(new File(url,fileName)); map.put("flagMsg", "true"); } catch (Exception e) { e.printStackTrace(); } } } }else{ map.put("flagMsg", "false"); } } 如上代码就是保存在服务器端了 然后就是保存数据库里 存放的是文件的名字 大小及时间;