Java教程

【Java复习Ⅲ17】SSM整合_上传upload

本文主要是介绍【Java复习Ⅲ17】SSM整合_上传upload,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

5th May


文章目录

    • 报错:
    • dispacherController
    • index.jsp
    • springmvc.xml配置
    • web.xml
    • 磁盘文件项工厂实现【OOP思想】
    • 一、框架:
    • 二、实现
    • 三、大致流程:


一、框架:

  1. 在springmvc.xml中配置 “解析器”
    mvc中处理还需要spring框架提供的multipart通用的【CommonsMultipartResolver】通用多部份解析器处理上传数据

    org.springframework.web.multipart.commons.CommonsMultipartResolver里面有三个小东西:
    下的property:
    (1)最大上传尺寸 maxUploadSize
    (2)缓冲尺寸 maxInMemorySize(向内的内存使用)
    (3)默认字符集(编码类型) defaultEncoding
    在这里插入图片描述

  2. JSP配置表单
    【input type = file】表示这是一个文件
    【method设置“post”】(get只能拿到值为文件名的字符串)
    【enctype=“multipart/form-data”】以二进制来传输数据
    在这里插入图片描述

  3. servlet控制器
    重要:@RequestParam MultipartFile
    1.对应页面上file控件的name属性
    2.从页面到controller接收到的文件就是“多部份文件”,RequestParam注解请求参数。
    3.必须设置为请求参数,如果不写的话,他会认为我们的是一个响应参数。页面上面会报错:“Required MultipartFile parameter ‘file’ is not present”

    存储到本地(输出流对接)—— 文件的名称存储到数据库(String存到数据库中)
    存储到数据库(byte[])—— 缺点(数组的大小 == 文件的大小)
    (简单的说就是写输入流、输出流,以及完成输入流read、输出流write的方法)

文件尽量保持【字节流】,避免所有编码问题(字节是最小单位,字符可能会打乱文件字节状态,因为字符比字节大一倍)
通过输入流把用户上传文件读入JVM内存,再通过输出流输出到工程文件夹下

在这里插入图片描述

磁盘文件项工厂实现【OOP思想】

实际开发时使用工具——fileupload来上传

二、实现

dispacherController

package com.haha.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;@Controllerpublic class dispacherController {
    @RequestMapping("/laizheli.do")
    public ModelAndView find(@RequestParam MultipartFile myFile) {
        ModelAndView mav = new ModelAndView();
        InputStream is = null;
        BufferedInputStream bis = null;
        FileOutputStream fos = null;
        try {
            System.out.println("\n\n\n文件名称以及文件大小为:" + myFile.getOriginalFilename());
            System.out.println("\t\t\t\t\t" + myFile.getInputStream().available());//            写一个输入流
            is = myFile.getInputStream();
            byte[] buffer = new byte[1024];
            bis = new BufferedInputStream(is);//            写关于输出的东西:
            String fileType = "newFile.jpg";
            String src = "C:/Users/willorn/Desktop/" + fileType;
            fos = new FileOutputStream(new File(src));//            向外面写文件
            int len = 0;
            while ((len = bis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) try {fos.close();
            } catch (Exception e) {e.printStackTrace();
            }
            if (bis != null) try {bis.close();
            } catch (Exception e) {e.printStackTrace();
            }
            if (is != null) try {is.close();
            } catch (Exception e) {e.printStackTrace();
            }
        }
        mav.setViewName("show.jsp");
        return mav;
    }}

index.jsp

<form action="laizheli.do" method="post" enctype="multipart/form-data">
    <input name="myFile" type="file"/>
    <input value="提交 " type="submit"/></form>

springmvc.xml配置

    <context:component-scan base-package="com.haha.controller" />

    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
        <property name="maxUploadSize" value="1048576" />
        <property name="maxInMemorySize" value="51200" />
        <property name="defaultEncoding" value="utf-8" />
    bean>

web.xml

简单的用servlet来告诉一下tomcat就行。。。还有一个简单的filter设置编码方式

    <servlet>
        <servlet-name>springMVCservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:config/springmvc.xmlparam-value>
        init-param>
    servlet>
    <servlet-mapping>
        <servlet-name>springMVCservlet-name>
        <url-pattern>*.dourl-pattern>
    servlet-mapping>

    <filter>
        <filter-name>encodingfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>utf-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>encodingfilter-name>
        <url-pattern>/url-pattern>
    filter-mapping>

三、大致流程:

  1. 我们首先在页面上由多类型的文件类型,file类型的文件会经由controller处理,controller处理需要先配置多部份文件的解析器
  2. 在springmvc中,我们可以配置这个多部份文件的解析器,供给controller使用(要先扫描到controller)

报错:

Required MultipartFile parameter 'file' is not present

今天还学习到一个新单词:“TOC”是“Table Of Contents”的缩写,意思是“目录”

               

这篇关于【Java复习Ⅲ17】SSM整合_上传upload的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!