文件上传

Posted q-1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传相关的知识,希望对你有一定的参考价值。

一、文件上传
1.对表单的要求
(1)提交方式必须是post;
(2)上传时,enctype = "multipart/form-data";

技术图片

        (3)必须要有<input type="file">
2.对servlet的要求
request.getInputStream();
3.fileupload组件
comments-fileupload.jar
comments-io.jar
三个核心类
 boolean ismultipartContent = ServletFileUpload.isMultipartContent(request);
        if (!ismultipartContent){
            throw new RuntimeException("你的表单不是enctype=multipart/form-data");
        }
        //1.创建DiskFileFactory工厂类
        DiskFileItemFactory dfif = new DiskFileItemFactory();
        //2.创建servletFileUpload核心对象
        ServletFileUpload sfu = new ServletFileUpload(dfif);
        //3.解析request对象,并得到一个表单项的集合
        try {
            List<FileItem> fileItems = sfu.parseRequest(request);
            for(FileItem fileItem:fileItems){
                if(fileItem.isFormField()){
                    //是普通表单
                    processFormFiled(fileItem);
                }else{
                    //上传表单项
                    processUploadFiled(fileItem);
                }
            }

        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

4.FileItem提供的方法
getFeildName(); //得到字段名
getString();//得到字段的值
getName();//得到文件名
getInputStream();
isFormFeild();//判断是否是普通表单项
getContentType();//获取上传文件的MIME类型
getSize();//获取上传文件的大小
//普通表單項
    private void processFormFiled(FileItem fileItem) {
        String fieldName = fileItem.getFieldName();
        String filedValue = fileItem.getString();
        System.out.println(fieldName + " = " + filedValue);
    }
private void processUpload(FileItem fileItem){
        //得到上传的名字
        String fileName = fileItem.getName();
        //得到文件流
        try {
            InputStream is = fileItem.getInputStream();
            //创建存盘的路径
            String realPath = this.getServletContext().getRealPath("/day18/upload");
            File storeDirectory = new File(realPath );
            if(!storeDirectory.exists()){
                storeDirectory.mkdirs();
            }
            //处理文件名
            //fileName = fileName.substring(fileName.lastIndexOf(File.separator)+1);
            if(fileName!=null){
                fileName = FilenameUtils.getName(fileName);
            }

 

以上是关于文件上传的主要内容,如果未能解决你的问题,请参考以下文章

什么是文件上传漏洞

vue上传文件到后台

JSP-超大文件上传-如何上传文件-大文件上传

php文件上传漏洞代码只允许上传图片

上传文件失败,具体原因:上传的文件超过大小限制,请上传小于 1024k的文件?

delphi10用布署上传文件