实现文件上传文件的地址的获取手段之一IO流读取
这是为了我方便之后来查询的代码:
该文件上传是使用form表单提交到后台再使用io流读取,获得文件路径;待修改和完善
package cn.edu.web.servlet; import cn.edu.pojo.Course; import cn.edu.service.CourseListService; import cn.edu.service.CourseListServiceImpl; import com.google.gson.Gson; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.*; @WebServlet("/AlterCourseServlet") public class AlterCourseServlet extends HttpServlet { //创建对象调用根据课程id修改课程信息的方法 CourseListService courseListService = new CourseListServiceImpl(); //创建course对象 Course course = new Course(); //用于存储文件满足的所有格式 Map<String,String> map = null; //文件的格式后缀名 陈必成 String extensionName = null; //文件格式是否符合要求 而定义的变量 String message = null; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理中文乱码 由于是使用io流读取,这个对于获取来说没用,但可以用以转发的情况处理乱码 response.setContentType("text/html;charset=UTF-8"); //判断是不是传入的一个二进制的流 boolean isMultipart = ServletFileUpload.isMultipartContent(request); //创建一个简单工厂实例 FileItemFactory factory = new DiskFileItemFactory(); //创建一个新的文件上传处理程序 ServletFileUpload upload = new ServletFileUpload(factory); //解析request try { List<FileItem> fileItems = upload.parseRequest(request); //处理上传的项目 Iterator iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { // //普通域 processFormField(item); } else { //文件域 此处注意processUploadFile()方法的参数里面传入request的目的是让下面写文件的时候获取根目录用的 processUploadFile(item, request); } } } catch (FileUploadException e) { e.printStackTrace(); } ServletInputStream inputStream = request.getInputStream(); byte[] bs = new byte[1024]; int total = -1; while ((total = inputStream.read(bs)) != -1) { System.out.print(new String(bs, 0, total)); } //获取根路径 String path = request.getContextPath(); System.out.println("根路径:"+path); //获取添加时间 //获取时间 String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); Gson gson = new Gson(); //将course获得的修改后的课程信息保存到对应课程id的课程信息上 System.out.println("获取到的修改课程信息:"+gson.toJson(course)); int i = courseListService.updateByExampleSelective(course); if(i>0){ System.out.println("修改成功"); } } /** * 文件域 * * @param item * @param request */ private void processUploadFile(FileItem item, HttpServletRequest request) { //获取文件相关信息 String fileName = ""; if (!item.isFormField()) { String fieldName = item.getFieldName(); fileName = item.getName(); // int split = fileName.lastIndexOf("."); // String first = fileName.substring(0, split) + System.currentTimeMillis(); // fileName = first + fileName.substring(split); // String contentType = item.getContentType(); // long sizeInBytes = item.getSize(); // System.out.println("\n文件名: " + fileName + "\n 文件属性:" + fieldName + "\n 文件大小:" + sizeInBytes + "\n 文件类型:" + contentType); //获取扩展名 陈必成 通过String的subString方法 和lastIndexOf(".") extensionName = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); // System.out.println("该文件的扩展名:"+extensionName); //验证是否格式正确 陈必成 map = new HashMap<String,String>(); map.put("jpg","jpg"); map.put("jpeg","jpeg"); map.put("png","png"); map.put("bmp","bmp"); map.put("gif","gif"); map.put("mp4","mp4"); map.put("asx","asx"); map.put("asf","asf"); map.put("mpg","mpg"); map.put("3gp","3gp"); map.put("mov","mov"); map.put("avi","avi"); map.put("flv","flv"); map.put("wmv","wmv"); } // 文件后缀判断 if (!map.containsKey(extensionName)) { System.out.println(extensionName); message = "输入文件格式不正确"; // 文件读入 }else{ //对于上传文件的判断 if(extensionName.equals("jpg")||extensionName.equals("bmp")||extensionName.equals("png")||extensionName.equals("jpeg")){ //上传的是仅支持 jpg bmp png jpeg格式的图片 陈必成 //以下是转存操作,找到对应储存文件的根路径 String fileRootPath = request.getServletContext().getRealPath("/images/upload/course"); File dir = new File(fileRootPath); if (!dir.exists()) { dir.mkdirs(); } //写文件 注释掉第一种写法,尝试第二种写法 File file = new File(fileRootPath + "/" + fileName); //写文件 String s = "/images/upload/course/" + fileName; try { //将图片存入硬盘指定位置 item.write(file); // System.out.println("项目路径:"+s); message = "保存成功"; // 将图片路径封装进去 等会再一起放入数据库 // course.setLogo(s); // System.out.println("图片路径:"+s); } catch (Exception e) { e.printStackTrace(); } }else if(extensionName.equals("mp4")){ //上传的是仅支持 mp4 格式的视频 //以下是转存操作,找到对应储存文件的根路径 String fileRootPath = request.getServletContext().getRealPath("/video/upload/course"); File dir = new File(fileRootPath); if (!dir.exists()) { dir.mkdirs(); } //写文件 注释掉第一种写法,尝试第二种写法 File file = new File(fileRootPath + "/" + fileName); //写文件 String s = "/video/upload/course/" + fileName; try { //将视频存入硬盘指定位置 item.write(file); //在后台输出视频路径---此处是项目路径 // System.out.println("项目路径:" + s); message = "保存成功"; // 将视频路径封装进去等会 放进数据库 // kpoint.setVideourl(s); // // course.setKpoint(kpoint); // System.out.println("视频路径:"+s); } catch (Exception e) { e.printStackTrace(); } } } System.out.println(message); } /** * 普通域 * * @param item */ private void processFormField(FileItem item) { String key = item.getFieldName(); String value = null; try { //处理中文乱码 value = item.getString("gb2312"); switch (key) { case "course_num": //这里是课程id的获取,并对其修改 System.out.println(value); course.setCourseid(Integer.parseInt(value)); break; case "course_name": //这里是课程名称的获取,并对其修改 course.setCoursename(value); break; case "course_classify": //这里是课程分类的获取,并对其修改 course.setCoursetype(value); break; case "sourcePrice": //这里是课程原价的获取,并对其修改 course.setSourceprice(Double.parseDouble(value)); break; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.service(req, resp); System.out.println("刷新...."); } @Override public void init() throws ServletException { super.init(); System.out.println("初始化...."); } }