SpringBoot usa Ali OSS para implementar el almacenamiento de archivos en la nube

SpringBoot usa Ali OSS para implementar el almacenamiento de archivos en la nube

Prefacio

A menudo utilizamos imágenes o recursos de documentos en nuestros proyectos. En general, cuando hay pocos archivos de este tipo, podemos almacenarlos directamente en el servidor, pero una vez que estos archivos alcanzan un cierto número, si se colocan en el servidor de aplicaciones, definitivamente Afecta al rendimiento del servidor de aplicaciones y, a veces, estos recursos de imagen también se utilizan directamente en la pantalla del front-end, por lo que no es apropiado colocarlos en el servidor de aplicaciones. Algunas empresas de Internet relativamente grandes pueden utilizar algunos sistemas de archivos distribuidos para lograr el propósito de almacenar archivos, pero el umbral para este enfoque es demasiado alto. ¿Cómo encontrar un método de almacenamiento de archivos adecuado y rentable? Entonces todo lo que tengo que decir es el servicio de almacenamiento de objetos OSS.

El sistema de archivos distribuidos FastDFS puede consultar mi blog: Sistema de archivos distribuidos FastDFS

texto

Servicio de almacenamiento de objetos

Servicio de almacenamiento de objetos ( OSS): es un servicio de almacenamiento en la nube masivo, seguro, de bajo costo y altamente confiable, adecuado para almacenar cualquier tipo de archivo:

  • OSSSe puede usar para almacenar archivos masivos como imágenes, audio y video, y registros.
  • Varios dispositivos terminales, Webprogramas de sitios web y aplicaciones móviles pueden OSSescribir o leer datos directamente .
  • OSSEs compatible con la escritura en continuo y la escritura de archivos.
    En pocas palabras, podemos OSSaumentar IOel ancho de banda de lectura y escritura del servidor evitando almacenar una gran cantidad de archivos, imágenes y otros recursos en el servidor .

Inserte la descripción de la imagen aquí

SpringBoot usa Ali OSS para implementar el almacenamiento de archivos en la nube

Preparación preliminar

Paso 1: Adquiera servicios de almacenamiento de objetos en Alibaba Cloud Mall

Inserte la descripción de la imagen aquí

Paso 2: configurar en la consola de Alibaba CloudAccessKey

Inserte la descripción de la imagen aquí

Parte de código

dependencia de maven

<!--oss对象关系存储-->
<dependency>
  <groupId>com.aliyun.oss</groupId>
  <artifactId>aliyun-sdk-oss</artifactId>
  <version>3.5.0</version>
</dependency>

<!--apache comment tools-->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
</dependency>

<!--提供文件上传下载-->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

application.properties: clase de configuración

##basic setting
server.port = 8080
server.address =127.0.0.1

# 解除文件大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

OssManagerUtil.java: clase de herramienta Ali OSS

/**
 * 阿里Oss对象存储工具类
 */
public class OssManagerUtil {
    
    

    private static String endpoint = “oss中获取的oss公网路径";
    private static String accessKeyId = “自己在阿里云申请的accessKeyId";
    private static String accessKeySecret = "自己在阿里云申请的accessKeySecret";
    private static String bucket = "bucket名称";


    private static OSS client;


    static {
    
    
        client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }


    /**
     * 上传图片
     *
     * @param fileName 图片名称,图片名称包括文件夹名称和“/”
     * @param length   图片大小
     * @param content  输入流
     */
    public static String uploadImage(String fileName, long length, InputStream content) {
    
    
        uploadBucketImage(bucket, fileName, length, content);
        return "https://" + bucket + "." + endpoint + "/" + fileName;
    }


    /**
     * 上传文件
     *
     * @param bucket   存储空间名
     * @param fileName 文件名(包括文件夹名称和“/”)
     * @param length   流的长度
     * @param content  输入流
     */
    public static void uploadBucketImage(String bucket, String fileName, long length, InputStream content) {
    
    
        // 创建上传Object的Metadata
        ObjectMetadata meta = new ObjectMetadata();
        // 必须设置ContentLength
        meta.setContentLength(length);
        // 上传Object.
        client.putObject(bucket, fileName, content, meta);
    }


    /**
     * 删除文件
     *
     * @param fileName 文件名称,图片名称包括文件夹名称和“/”
     */
    public static boolean delShopImage(String fileName) {
    
    
        //判断文件是否存在
        boolean exist = client.doesObjectExist(bucket, fileName);
        //文件不存在删除失败
        if (!exist) {
    
    
            return false;
        }
        //执行删除
        client.deleteObject(bucket, fileName);
        return true;
    }


    /**
     * 获得上传文件后url链接
     *
     * @param fileName 文件名(包括文件夹名称和“/”)
     * @return
     */
    public static String getUrl(String fileName) {
    
    
        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = client.generatePresignedUrl(bucket, fileName, expiration);
        if (url != null) {
    
    
            return url.toString();
        }
        return null;
    }

    /**
     * 创建存储空间
     *
     * @param bucketName 新建存储空间默认为标准存储类型,私有权限。
     * @return
     */
    public static void crateBucket(String bucketName) {
    
    
        // 新建存储空间默认为标准存储类型,私有权限。
        client.createBucket(bucketName);
    }
}

verificación

Interfaz de prueba: carga de archivos

/**
 * 文件上传到阿里oss
 */
@PostMapping("/uploadFiletoOss")
@ApiOperation(value = "文件上传到阿里oss")
public ResponseResult uploadFiletoOss(@RequestParam("file")MultipartFile file)throws IOException{
    
    
    String fileName = file.getOriginalFilename();
    String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
    fileName = UUID.randomUUID().toString().replace("-", "") + "." + suffix;
    String url = OssManagerUtil.uploadImage(fileName,file.getInputStream().available(),file.getInputStream());
    return ResponseResult.success(url);
}

Acceda a la interfaz de prueba:

Inserte la descripción de la imagen aquí

Abra la URL del archivo en línea de OSS devuelta por la interfaz para obtener el archivo en línea:

Inserte la descripción de la imagen aquí

Código fuente

El código fuente del proyecto se puede obtener de mi github: dirección del código fuente de github

El análisis del código fuente puede referirse a mi blog: plantilla SpringBoot lista para usar

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_40990818/article/details/109323530
Recomendado
Clasificación