OSS文件上传

1.文件上传到本地服务器的缺点

1.当我们的服务器重启,或者关闭时,我们上传到服务器的文件会消失

2.当我们又服务器群是,如果我第一次是访问的A服务器,将我的文件上传到A 服务器,当我第二次访问的时候,我访问的不是A服务器,而是B服务器,那我无法访问到我的文件

2.如何解决本地服务器的缺点

2.1.自己搭建一个文件服务器,将文件都放到里面

2.2.使用第三方的工具

3.普通文件上传到OSS

3.1.引入OSS 依赖

 

    
      repMaven.commons-fileupload
      commons-fileupload
      1.4
    

    
      org.springframework
      spring-webmvc
      5.2.15.RELEASE
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.13.2.2
    
    
      repMaven.javax.servlet
      servlet-api
      2.5
    
    
      org.projectlombok
      lombok
      RELEASE
      compile
    

      com.aliyun.oss
      aliyun-sdk-oss
      3.10.2
    
  

3.2.代码的书写

                在阿里云的产品文档可以找到

OSS文件上传_第1张图片

OSS文件上传_第2张图片 OSS文件上传_第3张图片

 OSS文件上传_第4张图片

代码:

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        //endpoint 找到自己的bucked的目录  点自己的包的名字,然后点击概览,有endpoint外网的地址
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        //自己的秘钥
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        String filePath= "D:\\localpath\\examplefile.txt";

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

        try {
            InputStream inputStream = file.getInputStream(filePath);            
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (OSSException oe) {
           
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}                    

3.elementui 异步上传OSS服务器

3.1.前端

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


    Title
    
    
    
    
    
    
    
    


    
<%--action:文件上传的路径--%>

3.2.后端

package com.ykq.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.Calendar;
import java.util.UUID;

/**
 * @program: qy151-springmvc-upload
 * @description:
 * @author: 闫克起2
 * @create: 2022-06-10 16:00
 **/
public class OSSUtils {

    public static String upload(MultipartFile file){
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";

        //LTAI78XQAZq2s5Rv
        //qdyZxR0x4LoUpTVbuyvCGdcrhEyw7H
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI78XQAZq2s5Rv";
        String accessKeySecret = "qdyZxR0x4LoUpTVbuyvCGdcrhEyw7H";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "jiu99";
        //你上传到oss后的名字 会根据日期帮你创建文件夹。 调用下面的方法获取文件上传后的名字
        String objectName =fileName(file);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            InputStream inputStream =file.getInputStream();
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (Exception oe) {

        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        //https://qy151.oss-cn-hangzhou.aliyuncs.com/2022/6/10/20d3d7e6b5bb455cb548675501f7270fgdnj.jpg
        String url="https://"+bucketName+"."+endpoint+"/"+objectName;
        return url;
    }

    //获取上传到oss后的名字
    private static String fileName(MultipartFile file){
        Calendar calendar=Calendar.getInstance();
        String name=calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+
                calendar.get(Calendar.DATE)+"/"+ UUID.randomUUID().toString().replace("-","")+
                file.getOriginalFilename();

        return name;
    }
}

3.3.接口

@RequestMapping("/login")
    @ResponseBody
    public Map upload04(MultipartFile file) {
        try {
            String url = OSSUtils.upload(file);
            Map map = new HashMap();
            map.put("code", 2000);
            map.put("msg", "上传成功");
            map.put("data", url);
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
        HashMap map = new HashMap();
        map.put("code", 5000);
        map.put("msg", "上传失败");
        return map;
    }

4.保存用户信息--头像

4.1.创建一个新的工程

4.2.引入我们需要的相关的依赖



    
      repMaven.commons-fileupload
      commons-fileupload
      1.4
    
    
      org.springframework
      spring-webmvc
      5.2.15.RELEASE
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.13.2.2
    
    
      repMaven.javax.servlet
      servlet-api
      2.5
    
    
      org.projectlombok
      lombok
      RELEASE
      compile
    
    
      com.aliyun.oss
      aliyun-sdk-oss
      3.10.2
    
  


  
    b
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
  
  
    b
    /**
  
  
    a
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:spring.xml
    
  
  
    a
    /
  

4.3.配置文件

 
    
    
    
        
    

4.4.前端页面

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


    Title
    Title
    
    
    
    
    


    
上传

4.5.实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class USer {
    private String name;
    private String sex;
    private int age;
}

4.6.commonResult

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult {
    private int code;
    private String msg;
    private Object data;
}

4.7.引入工具类

package guan.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.Calendar;
import java.util.UUID;

/**
 * TODO
 *
 * @author lenovo
 * @version 1.0
 * @since 2022-06-10  19:06:48
 */

public class OSSUtil {
    public static String main(MultipartFile file) {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        //LTAI5t7TZyWEmSktcmMVFcJr
        //OiRHuQYnoyjgqi9nBdrbHmthMWqESp
        String accessKeyId = "LTAI5t7TZyWEmSktcmMVFcJr";
        String accessKeySecret = "OiRHuQYnoyjgqi9nBdrbHmthMWqESp";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "jiu99";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        //创建日期对象

        //时间+随机的一个上传文件的真实名字
        String objectName =filename(file);
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            InputStream inputStream = file.getInputStream();
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (Exception oe) {
        }  finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        //让图片回显,将路径保存到request
        String img="https://"+bucketName+"."+endpoint+"/"+objectName;
        return img;
    }
    private static String filename(MultipartFile file){
        Calendar calendar=Calendar.getInstance();
      String name= calendar.get(calendar.YEAR)+"/"+(calendar.get(calendar.MONTH+1))+"/"
              +calendar.get(calendar.DATE)+"/"+
              UUID.randomUUID().toString().replace("-","")+
              file.getOriginalFilename();
      return name;
    }
}

4.8.接口

  @RequestMapping("login")
    @ResponseBody
    public CommonResult login(MultipartFile file){
        try {
            String s = OSSUtil.main(file);
            return new CommonResult(2000,"上传成功",s);
        }catch (Exception e){
            return new CommonResult(5000,"上传失败",null);
        }
        
    }
@RequestMapping("add")
    @ResponseBody
    public CommonResult add(@RequestBody User user){
        System.out.println(user);
        return new CommonResult(5000,"上传失败",null);
    }

你可能感兴趣的:(服务器,java,spring,mvc)