实现文件上传文件的地址的获取手段之一IO流读取

Posted bichen-01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现文件上传文件的地址的获取手段之一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

 

以上是关于实现文件上传文件的地址的获取手段之一IO流读取的主要内容,如果未能解决你的问题,请参考以下文章

JAVA IO流读取图片的问题

Java IO流--使用缓冲流实现非文本文件和文本文件的复制

利用Socket和IO流实现文件的上传与下载

java web 大文件上传下载

JavaWeb IO流实现文件上传下载

Java--IO流