Experiencia en el uso del servidor OSS para almacenar imágenes

Hasta donde sé, la imagen se almacena y puede volver a la ruta de la imagen, mostrando el método en la parte delantera:

1. El uso de fastDFS + nginx se describe en el blog anterior y no se repetirá aquí.
2. Cargue el servidor local (file.transferTo (dest)), hay defectos, como la hipertrofia del proyecto. No lo digas
3. El tema de hoy explica cómo usar el servidor OSS de Alibaba Cloud para acceder a las imágenes.

El almacenamiento en la nube Ali es fácil de usar.
Primero, vaya a Alibaba Cloud (https://www.aliyun.com/?utm_content=se_1003074876) para registrar una cuenta y abrir el OSS, crear un depósito, elegir el área más cercana, elegir el acceso de baja frecuencia usted mismo, el control de versiones no está abierto, lectura pública, No se requieren otros.
Una vez completada la creación, obtendrá accessKeyId, accessKeySecret,
obtendrá bucketName: abra la lista de depósitos: Nombre del depósito, que es
EndPoint (nodo regional), haga clic en bucketName para ingresar y podrá ver que
todos ellos son Millennium Foxes, por lo que no solicitaré una cuenta aquí.
¡Comienza a escribir! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
1. Configure las propiedades anteriores en yml:

spring:
  oss:
    accessKeyId: xxxxxx
    accessKeySecret: xxxxxx
    bucketName:xxxxxx-sso
    endpoint: oss-cn-chengdu.aliyuncs.com
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 1000MB

2. Introducir atributos en el código

@Value("${spring.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${spring.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${spring.oss.bucketName}")
    private String bucketName;
    @Value("${spring.oss.endpoint}")
    private String endpoint;
Subir
@RequestMapping("/upload")
    public String upload(MultipartFile multpartFile) {
   		 //创建了bucket下的目录这里指定上传到哪个目录下
        String path = "liaochao/2020-03016/";
        // 创建OSSClient的实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        if (ossClient.doesBucketExist(bucketName)) {
            System.out.println("您已经创建Bucket:" + bucketName + "。");
        } else {
            System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");
            // 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
            // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            ossClient.createBucket(bucketName);
        }
        String fileName = null;
        if (multpartFile.getSize() != 0 && !"".equalsIgnoreCase(multpartFile.getName())) {
            ObjectMetadata om = new ObjectMetadata();
            om.setContentLength(multpartFile.getSize());
            //设置上传到服务器的名称
            fileName = path + multpartFile.getOriginalFilename().toLowerCase();
            System.out.println("我是objectName==========================" + fileName);
            om.addUserMetadata("filename", fileName);
            try {
                ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(multpartFile.getBytes()), om);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != ossClient) {
                    ossClient.shutdown();
                }
            }
        }
        //设置文件的有效时间
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
        return url;
    }
Descargar abajo

Hay un pozo aquí: OSSObject ossObject = ossClient.getObject (bucketName, fileName); El nombre de archivo en el interior es el nombre del archivo, ¿es aliyuncs.com/ en la ruta completa devuelta anteriormente? ¡La cuerda al frente! ! !
Si está claro, puede hacer clic en la imagen en Alibaba Cloud. Para más detalles, el nombre del archivo a continuación es el nombre del archivo aquí. Si la carga se realiza correctamente, escriba el nombre del archivo en la base de datos. ¡Preste atención a la intercepción! !
Si lo muestra al frente, regrese: http://liaochao-sso.oss-cn-chengdu.aliyuncs.com/liaochao/2020-03016/xxx.jpg
. Algo detrás

@GetMapping("/download")
    public void download(String fileName, HttpServletResponse response) throws Exception {
        if (null == fileName) {
            log.info("文件名不能为空!");
            return;
        }
        BufferedOutputStream out = null;
        BufferedInputStream in = null;
        OSS ossClient = null;
        try {
            out = new BufferedOutputStream(response.getOutputStream());
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg
            //liaochao/2020-03016/203fb80e7bec54e78d4aeaebb9389b504ec26aa5.jpg
            OSSObject ossObject = ossClient.getObject(bucketName, fileName);
            in = new BufferedInputStream(ossObject.getObjectContent());
            response.setHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes(), "iso-8859-1"));
            byte[] buffer = new byte[in.available()];
            int L = 0;
            while ((L = in.read(buffer)) != -1) {
                out.write(buffer, 0, L);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != in) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
            if (null != ossClient) {
                ossClient.shutdown();
            }
        }
    }
Eliminar

¿FileName es lo mismo que eliminar allí? ¿Está detrás de .com? Parte entre

@RequestMapping("/delete")
    public String delete(String fileName) {
        log.info("………delete………start……");
        OSS ossClient = null;
        try {
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            ossClient.deleteObject(bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return "删除失败!";
        } finally {
            if (null == ossClient) {
                ossClient.shutdown();
            }
        }
        return "删除成功!";
    }
67 artículos originales publicados · Me gusta12 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/m0_37635053/article/details/104955228
Recomendado
Clasificación