精华内容
下载资源
问答
  • 文件上传解析器

    2018-06-05 13:36:00
    这个是一个上传文件的分解,主要的作用是配置文件上传的一些属性。 1.在这个分解上配置文件的编码方式 -defaultEncoding 2.配置文件最大值 -maxUploadSize 3.配置缓存 -m...
    这个是一个上传文件的分解器,主要的作用是配置文件上传的一些属性。
    1.在这个分解器上配置文件的编码方式 -defaultEncoding

    2.配置文件最大值 -maxUploadSize

    3.配置缓存 -maxInMemorySize

    ....等等
    注意:在这个bean中的id一定要叫multipartResolver,不然会报错,而且你都不知道为什么,在在文件上传的时候还需要两个jar文件
    1.com.springsource.org.apache.commons.fileupload-1.2.0.jar
        2.com.springsource.org.apache.commons.io-1.4.0.jar 

    转载于:https://www.cnblogs.com/zjj1996/p/9139331.html

    展开全文
  • 在springMVC的配置环境中添加文件上传解析器,这里可以设置上传的默认格式(解决 中文乱码问题),可以限制上传文件的大小,都可以在这里进行设置: <!-- 自定义文件上传解析器--> <bean id="multipart...

    第一步:

    导入jar包:

    第二步:

    在springMVC的配置环境中添加文件上传解析器,这里可以设置上传的默认格式(解决 中文乱码问题),可以限制上传文件的大小,都可以在这里进行设置:

    
    <!--    自定义文件上传解析器-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--        设置文件上传的默认编码格式-->
            <property name="defaultEncoding" value="utf-8"></property>
    <!--        显示文件上传的大小-->
            <property name="maxUploadSize" value="30"></property>
        </bean>

    第三步,

    书写一个简易的页面,这里可以用作参考:

    这里的form表单必须要设置enctype,文件上传的方式必须要用到post,因为get的长度有限制,当文件过大的时候无法进行上传

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <form action="/demo" method="post" enctype="multipart/form-data">
        <p>
          姓名: <input type="text" id="uname">
        </p>
    
        <p>
          年龄: <input type="text" id="age">
        </p>
    
        <p>
          上传: <input type="file"  name="fil">
        </p>
    
        <p>
          <input type="submit" value="上传">
        </p>
      </form>
      </body>
    </html>
    

    第四步:

    编写controller,接受参数,处理文件:

    package com.bjsxt.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.IOException;
    import java.util.UUID;
    
    @Controller
    public class MyController {
    
        @RequestMapping("/demo")
        public String demo( MultipartFile fil, HttpServletRequest req) throws IOException {
    //      设定文件的存储路径,如果文件不存在就创建文件
            File file=new File(req.getServletContext().getRealPath("/img"));
            if(!file.exists()){
                file.mkdir();
            }
    // getName是表单的name,getOriginalFilename是获得文件全名  getSize是获得文件大小  getContentType是获得文件路径
            System.out.println(fil.getName()+"---"+fil.getOriginalFilename()+"--"+fil.getSize()+"-"+fil.getContentType());
    //       因为重复的文件名会替换之前的文件名,所以使用UUID,可以防止文件名重复
            String uuid = UUID.randomUUID().toString();
    
            String jgp = fil.getOriginalFilename().substring(fil.getOriginalFilename().lastIndexOf("."));
    //        新的文件名   uuid.jgp
            String fileName=uuid+jgp;
    //        文件转换,将文件存储转换到file里,名字是fileName
            fil.transferTo(new File(file,fileName));
            return "redirect:success.jsp";
        }
    }
    

    完整的mvc文件:

    最后一个是异常解析器,当文件大小出现了异常,就会跳到error.jsp页面

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <context:component-scan base-package="com.bjsxt.controller"></context:component-scan>
        <mvc:annotation-driven></mvc:annotation-driven>
        <mvc:resources mapping="/img/**" location="/img/"></mvc:resources>
    
    <!--    自定义文件上传解析器-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--        设置文件上传的默认编码格式-->
            <property name="defaultEncoding" value="utf-8"></property>
    <!--        显示文件上传的大小-->
            <property name="maxUploadSize" value="30"></property>
        </bean>
    
    <!--    自定义资源异常解析器-->
        <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!--        异常映射-->
            <property name="exceptionMappings">
                <props>
                    <!--出现异常的信息的全路径这个异常一定写Spring抛出的异常,里面写出现异常的页面-->
                    <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error.jsp</prop>
                </props>
            </property>
        </bean>
    </beans>

     

    展开全文
  • 配置文件上传解析器

    2018-04-23 10:12:00
    转载于:https://www.cnblogs.com/gjack/p/8916189.html

     

    转载于:https://www.cnblogs.com/gjack/p/8916189.html

    展开全文
  • 文章目录6.8 MultipartResolver文件上传解析器6.8.1 MultipartResolver源码6.8.2 MultipartResolver初始化6.8.3 CommonsMultipartResolver分析 6.8 MultipartResolver文件上传解析器 MultipartResolver是处理文件...

    6.8 MultipartResolver文件上传解析器

    MultipartResolver是处理文件上传的策略接口,主要是将一个普通的请求(HttpServletRequest)包装成MultipartHttpServletRequest进行实现。在Servlet3.0以前,没有使用Spring MVC,处理文件上传是比较麻烦的一件事(需要手动解析请求)。现在Spring MVC对于请求进行了包装,可以很方便的处理文件上传。

    6.8.1 MultipartResolver源码

    先看一下MultipartResolver接口的源码。如代码清单6-36所示。

    代码清单6-36:MultipartResolver源码

    public interface MultipartResolver {
        boolean isMultipart(HttpServletRequest request);
        MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException;
        void cleanupMultipart(MultipartHttpServletRequest request);
    }
    

    该接口中有三个方法。现在依次讲解。

    • isMultipart:判断给定的请求是否包含某部分内容,通常情况下是检查请求中的”multipart/form-data”,当客户端是选择使用ajax进行请求的时候,请求类型type得特别注意,实际中可接受的请求取决于MultipartResolver 解析器的实现。

    • resolveMultipart:将给定的HttpServletRequest类型请求转换为MultipartHttpServletRequest类型请求(MultipartHttpServletRequest继承HttpServletRequest)。

    • cleanupMultipart:清理MultipartHttpServletRequest请求中的资源。

    6.8.2 MultipartResolver初始化

    与前面的组件一样,DispatcherServlet类在进行初始化的时候,会在initStrategies方法中调用initMultipartResolver方法进行初始化MultipartResolver。

    代码清单6-37:DispatcherServlet类中initMultipartResolver方法

    private void initMultipartResolver(ApplicationContext context) {
        try {
    //获取上下文中名称为”multipartResolver”的Bean
            this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME
                    , MultipartResolver.class);
            if (logger.isDebugEnabled()) {
                logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
            }
        }
        catch (NoSuchBeanDefinitionException ex) {
            //如果没有进行配置,则直接进行设置null。
            this.multipartResolver = null;
            if (logger.isDebugEnabled()) {
                logger.debug("Unable to locate MultipartResolver with name '"
                        + MULTIPART_RESOLVER_BEAN_NAME
                        + "': no multipart request handling provided");
            }
        }
    }
    

    通过上面源码可以知道,如果开发者需要处理文件上传,一定要配置一个名称为”multipartResolver”类型为MultipartResolver的Bean。

    6.8.3 CommonsMultipartResolver分析

    CommonsMultipartResolver是MultipartResolver的一个实现类,CommonsMultipartResolver的resolveMultipart方法如代码清单6-38所示。

    代码清单6-38:CommonsMultipartResolver类中resolveMultipart方法实现

    public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException {
        Assert.notNull(request, "Request must not be null");
    //resolveLazily判断是否要延迟解析文件,默认为false。开发者可以配置
        if (this.resolveLazily) {
            /*new DefaultMultipartHttpServletRequest(request),还并没有将请求中的数据封装到MultipartParsingResult 中去*/
            return new DefaultMultipartHttpServletRequest(request) {
                /*只有当getMultipartFiles方法被调用,且还没有解析请求数据,才调用initializeMultipart方法进行封装数据*/
                @Override
                protected void initializeMultipart() {
                    MultipartParsingResult parsingResult = parseRequest(request);
                    setMultipartFiles(parsingResult.getMultipartFiles());
                    setMultipartParameters(parsingResult.getMultipartParameters());
                    setMultipartParameterContentTypes(parsingResult
                            .getMultipartParameterContentTypes());
                }
            };
        }
        else {
    //解析请求的数据,并且将解析结果封装到DefaultMultipartHttpServletRequest对象中
            MultipartParsingResult parsingResult = parseRequest(request);
            return new DefaultMultipartHttpServletRequest(request
                    , parsingResult.getMultipartFiles()
                    , parsingResult.getMultipartParameters()
                    , parsingResult.getMultipartParameterContentTypes());
        }
    }
    

    从MultipartParsingResult parsingResult = parseRequest(request);可以看出,数据的解析是在parseRequest方法中进行的。

    接下来看一下parseRequest方法的源码,如代码清单6-39所示。

    代码清单6-39:CommonsMultipartResolver类中parseRequest方法

    protected MultipartParsingResult parseRequest(HttpServletRequest request)
            throws MultipartException {
        //获取请求的编码
        String encoding = determineEncoding(request);
    //根据编码匹配FileUpload 对象。
        FileUpload fileUpload = prepareFileUpload(encoding);
        try {
    //通过FileUpload实例解析请求数据,获取文件的列表
            List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
    /*将给定的文件项列表解析为一个MultipartParsingResult,
    MultipartParsingResult中包含MultipartFile实例和multipart参数映射*/
            return parseFileItems(fileItems, encoding);
        }
        //...省略部分捕获异常代码
    }
    

    parseFileItems方法的实现在CommonsMultipartResolver父类CommonsFileUploadSupport中被实现。可以看一下CommonsFileUploadSupport类的部分源码,如代码清单6-40所示。

    代码清单6-40:CommonsFileUploadSupport类部分源码

    public abstract class CommonsFileUploadSupport {
        //...
        //...
        private boolean preserveFilename = false;
        /**
         * maxUploadSize 设置能够上传的文件的最大大小(单位:字节)
         */
        public void setMaxUploadSize(long maxUploadSize) {
            this.fileUpload.setSizeMax(maxUploadSize);
        }
        /**
         * maxUploadSizePerFile在Spring4.2以后使用,与maxUploadSize用处一致。
         */
        public void setMaxUploadSizePerFile(long maxUploadSizePerFile) {
            this.fileUpload.setFileSizeMax(maxUploadSizePerFile);
        }
        /**
         * maxInMemorySize设定文件上传写到磁盘之前写入内存的最大值(单位:字节),超过这个参数将会生成临时文件,默认为10240。
         */
        public void setMaxInMemorySize(int maxInMemorySize) {
            this.fileItemFactory.setSizeThreshold(maxInMemorySize);
        }
        /**
         * 设置文件的编码,默认为ISO-8859-1
         */
        public void setDefaultEncoding(String defaultEncoding) {
            this.fileUpload.setHeaderEncoding(defaultEncoding);
        }
        /**
         * uploadTempDir设置文件上传的临时路径
         */
        public void setUploadTempDir(Resource uploadTempDir) throws IOException {
            if (!uploadTempDir.exists() && !uploadTempDir.getFile().mkdirs()) {
                throw new IllegalArgumentException("Given uploadTempDir ["
                        + uploadTempDir + "] could not be created");
            }
            this.fileItemFactory.setRepository(uploadTempDir.getFile());
            this.uploadTempDirSpecified = true;
        }
        //...
        /**
         * preserveFilename是Spring4.3.5之后的参数。
         * 设置是否保留客户端发送过来的文件名。默认为false。路径信息可以通过CommonsMultipartFile.getOriginalFilename()获取。 
         */
        public void setPreserveFilename(boolean preserveFilename) {
            this.preserveFilename = preserveFilename;
        }
    }
    

    从代码清单6-40可以得知,开发者可以在注入CommonsMultipartResolver进行文件上传解析时,可以配置一些文件上传的限制。

    另外还有一个MultipartResolver接口的实现类StandardServletMultipartResolver,因为篇幅有限,留待读者自行研究源码。

    项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm

    展开全文
  • -- 文件上传解析器 -->  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  <property name="defaultEncoding" value="utf-8"></property> ...
  • spingmvc 使用上传解析器...在springmvc.xml中配置文件上传解析器 &lt;!-- 定义文件上传解析器 --&gt; &lt;bean id="multipartResolver" class="org.springfr...
  • springboot上传文件解析器

    千次阅读 2020-01-19 16:13:29
    // resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setMaxInMemorySize(40960); resolver.setMaxUploadSize(5 * 1024 * 1024 * 1024);// 上传文件大小 5G return ...
  • springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源。 使用传统方式进行文件上传,需要我们手动解析request...首先,我们需要在springmvc.xml配置文件中配置文件解析器 <bean id="multi...
  • 1. 在springmvc.xml文件中配置文件解析器 <!--配置文件解析器对象--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"> <!--上传文件...
  • 首先我要说的是spring mvc的核心控制器 DispachServlet,这个控制器主要是用来起调度作用,他里面默认就带了一个文件上传的视图解析器,叫 multipartResolver,而这个视图解析器Spring MVC又提供了一个默认的实现,...
  • 一、问题描述 为支持restful风格请求...目的是让MultipartFilter过滤先将带文件上传的请求,进行解析。以便hiddenHttpMethodFilter可以取到”_method”参数,转化为相应的http动作。 既然multipartFilter要进行...
  • springboot默认文件解析器为StandardServletMultipartResolver 、配置文件解析器为CommonsMultipartResolver 实现了 MultipartResolver 常用接口有两个: 一个是 CommonsMultipartResolver:使用Jakarta Commons ...
  • Spring Boot 文件上传原理其实就是Spring MVC,因为这部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么处理文件上传这个过程的呢?下面通过本文给大家详细介绍下,一起看看吧
  • // resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setMaxInMemorySize(40960); resolver.setMaxUploadSize(5 * 1024 * 1024 * 1024);// 上传文件大小 5G return ...
  • 但是仅靠文件上传往往不行,有了解析漏洞的帮助效果可能会更好。 解析漏洞就是让web容器把我们上传的文件当成脚本解析的过程; 文件上传漏洞就是通过各种方式使得我们的含有恶意代码的文件上传到服务器的过程。 ...
  • 文件上传文件上传可以与文件包含相结合 1.文件上传漏洞: 文件上传漏洞需要的前提条件: 能上传木马 上传的木马能执行 还要清楚上传后的路径 一句话木马:<?php @eval($_POST[cmd]);?> eval 执行命令...
  • 项目中我们会上传文件直接解析进行数据的传递和存储 一般的文件我们都可以使用读写操作 像excel之类解析也有总结(excel解析http://blog.csdn.net/docuxu/article/details/78326330)下面总结一下上传压缩文件 然后...
  • 文件上传&解析漏洞

    千次阅读 2019-08-13 15:15:22
    一、IIS 5.x/6.0解析漏洞(03) IIS 6.0解析利用方法有两种 ...例如目录 hahaha.asp,那么/hahaha.asp/1.jpg 一个jpg格式的文件就会被当做asp脚本文件解析执行,假设黑客可以控制问上传文件的文件夹路径...
  • 文件上传漏洞解析及简单绕过技巧

    千次阅读 2019-09-06 22:41:54
    文件上传漏洞简介 什么是文件上传漏洞? 简单来说就是,攻击者向服务器上上传了服务器可以解析的动态脚本文件,这里上传的文件可以是木马,病毒,恶意脚本或者Webshell等 这种攻击方式是最为直接和有效的,...
  • Excel文件一键上传解析导入数据库

    万次阅读 2017-02-15 00:23:36
    文件一键上传 解析excel
  • 文件上传解析漏洞一、文件上传漏洞介绍二、文件上传漏洞三、文件绕过1.JS绕过2.文件后缀名绕过2.文件类型绕过 一、文件上传漏洞介绍 1、文件上传:现代互联网的功能,允许用户上传图片、视频及其他类型文件,向...
  • FileUpload是apache Commons 用于文件上传的组件,实际上就是用来解析http请求,大家都知道,上传文件的时候,http的request请求的 content-type 是multipart/form-data,我们就可以用FileUpload 来解析http请求,...
  • 文件上传 06 解析攻击

    2018-08-13 00:04:29
    本文记录文件上传学习过程,教程为 《Upload Attack Framework V1.0》 解析攻击 网络渗透的本质 主体就是代码注入+代码解析/执行 像缓冲区溢出攻击,sql 注入攻击,文件上传攻击,文件包含...
  • 这里使用apache的开源jar包完成上传功能,使用jar包分别是:common-...springmvc-mvc.xml配置,这里主要配置springmvc解析器CommonsMultipartResolver等等,这里主要是配置文件上传解析器,下面是配置文件代码...
  • django 20、上传文件原理解析

    千次阅读 2015-12-10 20:49:23
    最近还是被django的上传文件搞得晕头转向,转而看了这方面的原理,把自己的心得写了出来。 首先,我想说:如果你使用的是django默认的FileField的形式通过表单上传,那么其实你完全不需要管理如何上传,或者自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,553
精华内容 49,821
关键字:

文件上传的解析器