栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

三、springmvc第三节

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

三、springmvc第三节

一、文件上传的原理

在前端页面,我们可以提交文件,点击提交以后,文件的路径会被传到控制层,然后将这个路径存到数据库中。

        当我们想查询我们添加的文件时,页面会发送请求到控制层,执行查询业务,像数据库中查询我们的文件路径,如果是ajax异步请求,在控制层封装成json数据最后返回到前端页面。

二、文件上传到本地服务器(Tomcat)

实现步骤:

(1)在pom.xml中引入文件上传的依赖--commons-fileupload

    
    
      commons-fileupload
      commons-fileupload
      1.4
    

(2)简单创建一个前端页面,包含文件上传的表单和提交按钮

<%--
  Created by IntelliJ IDEA.
  User: m1762
  Date: 2022/6/9
  Time: 20:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

注意:

  • method提交方式必须为:post
  • enctype:默认为:application/x-www-form-urlencoded,这里需要改为:multipart/form-data
  • input的type为file类型的标签,必须要有name属性。

(3)在springmvc中配置文件上传解析器


     
          
          
     

注意:id名必须为: multipartResolver

(4)在controller包下写upload01的接口方法类

package com.lrs.controller;

import com.lrs.util.CommenRuselt;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;


@Controller
public class UploadController {
    @RequestMapping(value = "/upload01")
    public String upload01(HttpServletRequest request, MultipartFile file) throws IOException {
        //(1)得到本地服务目录的地址
        String path = request.getSession().getServletContext().getRealPath("upload");
        System.out.println(path);
        //(2)判断该目录是否存在 不存在则创建
        File file1 = new File(path);
        if (!file1.exists()){
            file1.mkdirs();
        }
        //(3)把myfile保存到本地服务中某个文件夹下。
        String filename = UUID.randomUUID().toString().replace("-","")+file.getOriginalFilename();
        //把myfile转移到目标目录下
        File target = new File(path+"/"+filename);
        file.transferTo(target);
        return "";
    }

注意:传参处的MultipartFile 类型的变量名必须和上面 步骤(2)中的input 内type属性为file的标签中的name中的名称一致!

 运行效果:

三、elementui+vue+axios实现文件上传

(1)前端页面布局

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录页面
    <%--引入css样式--%>
    
    <%--引入vue的js--%>
    
    <%--引入axios的js--%>
    
    <%--引入elementui的js--%>
    
    <%--引入qs--%>
    
    


    
        
                action="upload02"
                :show-file-list="false"
                :on-success="handleAvatarSuccess"
                :before-upload="beforeAvatarUpload">
            
            
        
    

    

注意:elementui中提交文件的表单 中的name属性默认为file。

(2)后端接口

package com.lrs.controller;

import com.lrs.util.CommenRuselt;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;


@Controller
public class UploadController {
    @RequestMapping(value = "/upload02")
    @ResponseBody
    public CommenRuselt upload02(HttpServletRequest request, MultipartFile file) {
        try {
            String path = request.getSession().getServletContext().getRealPath("upload");
            File file1 = new File(path);
            if (!file1.exists()){
                file1.mkdirs();
            }
            String filename = UUID.randomUUID().toString().replace("-","")+file.getOriginalFilename();
            File target = new File(path+"/"+filename);
            file.transferTo(target);
            Object data = "http://localhost:8080/s/upload/"+filename;
            CommenRuselt commenRuselt = new CommenRuselt(2000,"上传成功",data);
            return commenRuselt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        CommenRuselt ruselt = new CommenRuselt(5000,"上传失败",null);
        return ruselt;
    }
}

注意:前端发送的是axios异步请求,后端必须响应给前端一个json格式数据。@ResponseBody注解为springmvc中内置的json转换方法。

四、注册阿里云服务器并将文件上传到OSS

        上传到本地服务器的缺点: 如果搭建集群,导致文件无法在集群中共享。 它的解决方法就是把文件专门上传到一个文件服务器上,这些tomcat服务器都操作同一个文件服务器。

4.1 申请OSS文件服务

4.2 在OSS界面上操作文件上传

(1)创建bucket容器

        (2)在该bucket中通过网页面板的形式操作该bucket。但是实际开发我们应该通过java代码往bucket中上传文件。

4.3 申请阿里云的密钥

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号