Back to Javatutorial

Spring MVC ļϴ

docs/Spring全家桶/SpringMVC/SpringMVC如何实现文件上传.md

1.0.04.6 KB
Original Source

Spring MVC ļϴ

SpringöԶ·ϴ֧֣רڴwebӦеļϴͨעһɲεMultipartResolveröļ·ϴ֧֡ýӿڶorg.springframework.web.multipart¡SpringΪһļϴMultipartResolverӿڵһʵ֣ΪServlet 3.0·תṩһʵ֡

<section>

Ĭ£SpringĶ·ϴ֧DzģΪЩϣԼ·SpringĶ·ϴ֧֣ҪwebӦõһ·ÿ󣬽Dzһಿģ̱һ·עMultipartResolverᱻ֮еĶ·ϴԾһԴˡһ䷭IJãmultipartɶ·ǶಿֻСĶע˴

</section>

Spring MVC ʹMultipartResolverCommons FileUploadļ

2018-07-26 14:28

ĴչʾʹһͨõĶ·ϴCommonsMultipartResolver

<section>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- ֵ֧һԣֵ֧ļСֽΪλ -->
    <property name="maxUploadSize" value="100000"/>

</bean>

ȻҪö·Ҫclasspath·׼jarʹõͨõĶ·ϴCommonsMultipartResolverҪjarcommons-fileupload.jar

SpringDispatcherServlet⵽һಿʱἤĶ·󽻸ѵǰHttpServletRequestװһֶ֧·ļϴMultipartHttpServletRequest``MultipartHttpServletRequest㲻Իȡö·еϢĿлøö·ݱ

</section>

Spring MVC Servlet 3.0µMultipartResolver

2018-07-26 14:29

ҪʹûServlet 3.0Ķ·תܣweb.xmlΪDispatcherServletһmultipart-configԪأͨServlet̵ķʹjavax.servlet.MultipartConfigElementעᣬԼԼServlet࣬ʹjavax.servlet.annotation.MultipartConfigע⡣ļС洢λõѡServletעᣬΪServlet 3.0ڽMultipartResolverIJ㼶ЩϢ

<section>

ͨһַʽServlet 3.0·תܣͿ԰һStandardServletMultipartResolverӵSpringȥˣ

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
</section>

Spring MVC еļϴ

2018-07-26 14:30

MultipartResolverɴʱһ̴ȣһļϴıֱϴԣenctype="multipart/form-data"֪ζԶ·ϴıб루encode

<section>
<html>
    <head>
        <title>Upload a file please</title>
    </head>
    <body>
        <h1>Please upload a file</h1>
        <form method="post" action="/form" enctype="multipart/form-data">
            
            
            
        </form>
    </body>
</html>

һǴһܴļϴĿҪĿһע@ControllerĿһܵķMultipartHttpServletRequest``MultipartFile

@Controller
public class FileUploadController {

    @RequestMapping(path = "/form", method = RequestMethod.POST)
    public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) {

        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
            return "redirect:uploadSuccess";
        }

        return "redirect:uploadFailure";
    }

}

@RequestParamעνӦеĶֶεġУõbyte[]ļݣֻûκ¡ʵӦУܻὫ浽ݿ⡢洢ļϵͳϣĴ

ʹServlet 3.0Ķ·תʱҲʹjavax.servlet.http.PartΪ

@Controller
public class FileUploadController {

    @RequestMapping(path = "/form", method = RequestMethod.POST)
    public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") Part file) {

        InputStream inputStream = file.getInputStream();
        // store bytes from uploaded file somewhere

        return "redirect:uploadSuccess";
    }

}
</section>

Spring MVC ͻ˷ļϴ

2018-07-26 14:30

ʹRESTfulij£ĿͻҲֱύ·ļһڽҲͬáͬǣύļͼ򵥵ıֶΣͻ˷͵ݿԸӸӣݿָΪijضͣcontent type磬һ·ϴܵһǸļڶǸJSONʽݣ

<section>
    POST /someUrl
    Content-Type: multipart/mixed

    --edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
    Content-Disposition: form-data; name="meta-data"
    Content-Type: application/json; charset=UTF-8
    Content-Transfer-Encoding: 8bit

    {
        "name": "value"
    }
    --edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
    Content-Disposition: form-data; name="file-data"; filename="file.properties"
    Content-Type: text/xml
    Content-Transfer-Encoding: 8bit
    ... File Data ...

Ϊmeta-dataIJ֣ͨϵ@RequestParam("meta-data") String metadataáDzΪJSONʽݵܸͨһӦǿͶ󣬾@RequestBodyͨHttpMessageConverterһתһһ

ǿܵģʹ@RequestPartעʵ֣@RequestParamע⽫ʹض·屻HttpMessageConverterתʱǶ·вͬͲ'Content-Type'

@RequestMapping(path = "/someUrl", method = RequestMethod.POST)
public String onSubmit(@RequestPart("meta-data") MetaData metadata, @RequestPart("file-data") MultipartFile file) {

    // ...

}

עMultipartFileܹ@RequestParam``@RequestPartע»õģַõݡķ@RequestPart("meta-data") MetaDataΪеͷ'Content-Type'ΪJSONݣȻͨMappingJackson2HttpMessageConverterתضĶ

</section>