• 实现文件上传文件的地址的获取手段之一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("
    文件名: " + fileName + "
     文件属性:" + fieldName + "
     文件大小:" + sizeInBytes + "
     文件类型:" + 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("初始化....");
        }
    
    
    }
    Servlet
  • 相关阅读:
    layui实现复选框全选,反选
    Lambda表达式详解
    母版页 VS shtml—ASP.NET细枝末节(3)
    无废话WCF入门教程一[什么是WCF]
    String.Format用法
    C#基础--之数据类型
    簡單SQL存儲過程實例
    SQL Server 存储过程
    存储过程详解
    sql语句分页多种方式ROW_NUMBER()OVER
  • 原文地址:https://www.cnblogs.com/bichen-01/p/11830276.html
Copyright © 2020-2023  润新知