SSM框架之SpringMVC文件上传(本地,ajax,阿里oss)

目录

一、普通本地上传

二、ajax本地上传

三. 上传到oss服务器

四、通过ajax完成上传到oss上


一、普通本地上传

  1. 表单的提交方式method必须是post.
  2. 表单上传的编码必须是二进制。enctype="multipart/form-data"
  3. input的类型必须file类型。而且该输入框必须有name属性。

前端网页

 依赖



  commons-fileupload
  commons-fileupload
  1.4

配置文件上传解析器:



    
    

controller代码



import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.Date;


@Controller
public class UploadController {

    @RequestMapping("/upload") //springmvc把上传的文件封装到MultipartFile类中。
                               //myfile必须和表单中name名称一致。
    public String upload01(MultipartFile myfile, HttpServletRequest request){
        //获取图片在服务器下的路径。
        HttpSession session = request.getSession(); //获取session对象
        ServletContext servletContext = session.getServletContext();//应用程序对象。
        String path = servletContext.getRealPath("/upload"); //获取工程下upload文件夹的真实路径
        //2.根据该路径创建文件对象.
        File file=new File(path);
        if(!file.exists()){ //指定路径的文件不存在。
             file.mkdir();//创建该文件。
        }
        //3.获取上传的文件名。
        String filename = myfile.getOriginalFilename();
        filename=new Date().getTime()+filename; //防止重名。
        //4.把上传的文件保存到目标目录。
        File target=new File(path+"/"+filename);
        try {
            myfile.transferTo(target); //把上传的文件保存到target目录中
        }catch (Exception e){
             e.printStackTrace();
        }
        //文件上传的路径保存到request对象中。 
        request.setAttribute("imgsrc","http://localhost:8080/springmvc_upload/upload/"+filename);
        return "success";
    }
}

二、ajax本地上传

前端:

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


    Title
    



头像:
姓名:
性别:

controller层


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.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: springmvc-upload
 * @description:
 * @author: jdy
 * @create: 2021-12-09 22:04
 **/
@Controller
public class UploadController2 {
    @RequestMapping("/upload2")
    @ResponseBody
    public Map upload2(MultipartFile myfile, HttpServletRequest request, User user){
        Map map=new HashMap();
        //1.获取保存的真实路径
        String path = request.getSession().getServletContext().getRealPath("upload");
        //2.根据真实路径封装文件File对象
        File file=new File(path);
        if(!file.exists()){
             file.mkdirs();
        }
        //3.获取文件的名称
        String filename=myfile.getOriginalFilename();
        filename=new Date().getTime()+filename;
        //4. 文件存方在真实的路径下
        File target=new File(path+"/"+filename);
        try {
            myfile.transferTo(target);//保存
            map.put("code",2000);
            map.put("msg","上传成功");
            map.put("imgSrc","http://localhost:8080/springmvc_upload/upload/"+filename);
            return map;
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put("code",5000);
        map.put("msg","上传失败");
        return map;
    }
}

三. 上传到oss服务器

先开通服务

SSM框架之SpringMVC文件上传(本地,ajax,阿里oss)_第1张图片

 

SSM框架之SpringMVC文件上传(本地,ajax,阿里oss)_第2张图片

 

引入依赖


    com.aliyun.oss
    aliyun-sdk-oss
    3.10.2

 官方文档

SSM框架之SpringMVC文件上传(本地,ajax,阿里oss)_第3张图片

 前端

头像:
姓名:
性别:

controller层

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.ykq.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Date;

/**
 * @program: springmvc-upload
 * @description:
 * @author: jdy
 * @create: 2021-12-09 22:33
 **/
@Controller
public class UploadController3 {

    @RequestMapping("/upload3")
    public String upload3(MultipartFile myfile, HttpServletRequest request, User user){

        try {
      // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = "oss-cn-hangzhou.aliyuncs.com";
      // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = "自己的ID";
            String accessKeySecret = "自己的秘钥";

          // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

              // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = myfile.getInputStream();
            //获取上传的文件名
            String filename = myfile.getOriginalFilename();
            filename = new Date().getTime() + filename;
             // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            ossClient.putObject("qy145", filename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //
//            https://qy145.oss-cn-hangzhou.aliyuncs.com/16388489433231.jpg
            String url="https://qy145."+endpoint+"/"+filename;
            request.setAttribute("imgsrc",url);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "success";
    }
}

四、通过ajax完成上传到oss上

前端

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


    Title
    



头像:
姓名:
性别:

controller层

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.ykq.entity.User;
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.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: springmvc-upload
 * @description:
 * @author: 闫克起2
 * @create: 2021-12-07 11:54
 **/
@Controller
public class UploadController4 {

    @RequestMapping("/upload4")
    @ResponseBody
    public Map upload4(MultipartFile myfile, HttpServletRequest request, User user) {
        Map map = new HashMap();
        try {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = "oss-cn-hangzhou.aliyuncs.com";
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = "自己ID";
            String accessKeySecret = "自己秘钥";

            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = myfile.getInputStream();
            //获取上传的文件名
            String filename = myfile.getOriginalFilename();
            filename = new Date().getTime() + filename;
            // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            ossClient.putObject("qy145", filename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //
//            https://qy145.oss-cn-hangzhou.aliyuncs.com/16388489433231.jpg
            String url = "https://qy145." + endpoint + "/" + filename;
            map.put("code", 2000);
            map.put("msg", "上传成功");
            map.put("imgSrc", url);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        map.put("code", 5000);
        map.put("msg", "上传失败");
        return map;
    }
}

你可能感兴趣的:(spring,后端,java,ajax,springmvc)