美文网首页
Spring Boot项目中文件上传(OSS对象存储的用法)

Spring Boot项目中文件上传(OSS对象存储的用法)

作者: 我是邱邱 | 来源:发表于2019-07-12 13:19 被阅读0次

一、添加依赖包,到https://mvnrepository.com/这个网站去查找所需的依赖包;

<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.4.0</version>
</dependency>

二、创建AccessKey

访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用云服务API,而登录密码用于登录控制台。如果您不需要调用API,那么就不需要创建AccessKey。
可以使用AccessKey构造一个API请求(或者使用云服务SDK)来操作资源。AccessKey包括AccessKeyId和AccessKeySecret。

AccessKeyId用于标识用户。
AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密。

三、创建配置文件application.properties,配置所需要的oss参数,

aliyun-oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
aliyun-oss.access-key-id=*********       //oss对应的id与secret
aliyun-oss.access-key-secret=**********
aliyun-oss.bucket-name=hpu-admin      //已经在控制台创建的bucket
aliyun-oss.path=ios   //上传文件的路径,如果bucket中不存在该路径,就创建
aliyun-oss.server-url=https://tp-app.oss-cn-hangzhou.aliyuncs.com
需要普及一下,我们保存在oss中的文件的外部访问链接的组成,参考https://mvp.aliyun.com/zhidao/2061
https://bucket.endpoint/文件保存的bucket下面的路径

所以上面的aliyun-oss.server-url是为了代码中生成保存文件的链接使用的。

四、需要将配置中的信息进行bean的绑定

这里我们使用注解的方式将配置信息与bean对象的属性进行绑定

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = AliyunOssProperties.PREFIX)
@Data
public class AliyunOssProperties {
    public static final String PREFIX = "aliyun-oss";

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
    private String path;
    private String serverUrl;

}

五、上传文件(这里以文件流的形式上传),这里写一个工具类

//这里的basePath可以通过配置文件进行配置,也可以通过自己手动书写,指的是文件bucket下面的存储路径
public UploadFileDTO uploadFileToAliyunOss(MultipartFile picture , String basePath) {
//以时间戳对文件进行重命名,以免文件冲突
        String fileName = System.currentTimeMillis() + "_" + picture.getOriginalFilename() ;
        String uploadPath =  basePath + "/" + fileName;
        String key = "/" + basePath + "/" + fileName;
        OSSClient ossClient = new OSSClient(this.aliyunOssProperties.getEndpoint(), this.aliyunOssProperties
                .getAccessKeyId(), this.aliyunOssProperties.getAccessKeySecret());
        InputStream inputStream = null;
        UploadFileDTO dto = new UploadFileDTO();
        try {
            ObjectMetadata meta = new ObjectMetadata();
//获取图片的输入流
            inputStream = picture.getInputStream();
            meta.setContentType("text/plain");
            ossClient.putObject(this.aliyunOssProperties.getBucketName(), uploadPath, inputStream);
        } catch (OSSException oe) {
            throw new BaseException(ExceptionCode.ALI_OSS_OPEN_STORAGE_SERVICE_ERROR);
        } catch (ClientException ce) {
            throw new BaseException(ExceptionCode.ALI_OSS_REMOTE_ERROR);
        } catch (IOException e) {
            throw new BaseException(ExceptionCode.ALI_OSS_UPDATE_ERROR);
        } finally {
//关闭ossClient
            ossClient.shutdown();
        }
        dto.setName(fileName);
        dto.setKey(key);
        dto.setUrl(this.aliyunOssProperties.getServerUrl()+key);
        return dto;
    }

其中UploadFileDTO类为自己封装的一个类

import lombok.Data;

@Data
public class UploadFileDTO {

    String name;

    String key;

    String url;

    /**
     * 是否上传成功
     */
    boolean success = true;

    /**
     * 错误消息
     */
    String errorMsg;

    public UploadFileDTO() {
    }

    public UploadFileDTO(boolean success, String errorMsg) {
        this.success = success;
        this.errorMsg = errorMsg;
    }

ExceptionCode为自己封装的枚举异常类,里面是出现异常的情况下的编号与详解,下面我列出来这篇简书中用到的:

package com.tp.exception;

public enum ExceptionCode {
    
    SUCCESS("200","执行成功"),
    UNKNOWN_EXCEPTION("0","未知错误"),
    NOT_PERMISSION_ERROR("1","API暂不开放"),
    DB_ERR_EXCEPTION("1000","数据库操作失败"),
    DB_BUSY_EXCEPTION("1001","数据库繁忙"),
    PARAMETER_WRONG("1010","参数错误"),
    PARAMETER_MISSING("1011","缺少参数"),
    SIGN_FAILURE("1020","签名失败"),
    SIGN_ERROR("1021","签名错误"),
    REPEAT_OPERATION("1030", "重复操作"),
    
    INVALID_ACCESS_EXCEPTION("2000","用户名或者密码错误"),
    NO_THIS_USER("2001","查无此用户"),
    NO_PERMIT("2002", "未登陆"),
    LOGIN_TIMEOUT("2003", "登录超时"),
    USER_NOT_PERMISSION("2004", "账号已经申请注册,暂未通过审核"),
    USER_PHONE_HAS_REGISTERED("2005", "该手机号已经申请注册"),
    USER_DELETE_REGISTERED("2006", "该账号权限已经被禁止使用"),

    ALI_OSS_OPEN_STORAGE_SERVICE_ERROR("9000","当访问对象存储服务 Open Storage Service 失败时抛出该异常类实例,请重新尝试"),
    ALI_OSS_REMOTE_ERROR("9001","尝试访问阿里云服务时的异常,请重新尝试"),
    ALI_OSS_UPDATE_ERROR("9002","上传文件失败,请重新尝试"),
    ALI_OSS_FILE_SAVE_ERROR("9003","上传文件保存失败,请重新尝试"),

    API_NOT_PERMISSION_ERROR("10000","数据未授权。"),
    PAGES_NOT_PERMISSION_ERROR("10001","页面未授权。"),

    private String code;
    private String msg;

    ExceptionCode(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    public String getCode(){
        return code;
    }
    public String getMsg(){
        return msg;
    }

    public static ExceptionCode getByCode(String code){
        for(ExceptionCode ec : ExceptionCode.values()){
            if(ec.getCode().equals(code)){
                return ec;
            }
        }
        return null;
    }
}

主要参考阿里云的SDK文档:
https://help.aliyun.com/product/31815.html?spm=a2c4g.750001.list.19.32cb7b13LsEI5B

相关文章

  • Spring Boot项目中文件上传(OSS对象存储的用法)

    一、添加依赖包,到https://mvnrepository.com/这个网站去查找所需的依赖包; 二、创建Acc...

  • SpringBoot文件上传

    基于Spring Boot的文件上传上传方式:1.直接上传到应用服务器2.上传到OSS(内容存储服务器,如:阿里云...

  • 4 SpringBoot文件上传

    基于Spring Boot的文件上传上传方式:1.直接上传到应用服务器2.上传到OSS(内容存储服务器,如:阿里云...

  • oss-server 小型对象存储系统

    oss-server 项目介绍 oss-server是针对项目开发时提供的小型对象存储系统,开发者在针对文件上传时...

  • 阿里云开发日志

    OSS备份 ./ossutil64 cp {上传的文件} oss://{bucket名称}/{存储的文件名} --...

  • OSS上传视频文件记录

    项目中用到了视频上传到OSS服务器,做个记录: 1.首先添加依赖 //添加OSS对象存储的sdk compile'...

  • 2019-04-01

    Spring Boot文件上传 文件上传是项目开发中的常见操作。一般分为如下几种解决方案 直接上传到应用服务器 上...

  • Spring Boot实现文件上传

    一、文件上传的配置 Spring Boot默认支持文件上传,对文件上传支持友好。对上传进行配置如下: Spring...

  • 我的简书目录

    spring spring 参数校验 spring 上传文件和下载文件 spring-boot-devtools ...

  • spring boot 文件上传坑

    默认spring boot 项目文件上传附件大小为 1MB,需要更改yml配置

网友评论

      本文标题:Spring Boot项目中文件上传(OSS对象存储的用法)

      本文链接:https://www.haomeiwen.com/subject/bdpqjqtx.html