Expérience de l'utilisation du serveur OSS pour stocker des images

Pour autant que je sache, l'image est stockée et peut revenir au chemin de l'image, montrant la méthode à l'avant:

1. L'utilisation de fastDFS + nginx est décrite dans le blog précédent et ne sera pas répétée ici.
2. Téléchargez le serveur local (file.transferTo (dest)), il y a des défauts, comme l'hypertrophie du projet. Ne le dis pas.
3. Le sujet d'aujourd'hui explique comment utiliser le serveur OSS d'Alibaba Cloud pour accéder aux images.

Le stockage cloud Ali est facile à utiliser.
Tout d'abord, accédez à Alibaba Cloud (https://www.aliyun.com/?utm_content=se_1003074876) pour enregistrer un compte et ouvrir l'OSS, créer un compartiment, choisir la zone la plus proche, choisir un accès basse fréquence par vous-même, le contrôle de version n'est pas ouvert, lecture publique, D'autres ne sont pas nécessaires.
Une fois la création terminée, vous obtiendrez accessKeyId, accessKeySecret,
obtenez bucketName: ouvrez la liste de bucket: nom de bucket, qui est
EndPoint (nœud régional), cliquez sur bucketName pour entrer et vous pouvez voir
qu'ils sont tous des renards du millénaire, donc je ne demanderai pas de compte ici.
Commencez à écrire! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
1. Configurez les propriétés ci-dessus 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. Introduisez des attributs dans le code

@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;
Téléchargez
@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;
    }
Télécharger vers le bas

Il y a une fosse ici: OSSObject ossObject = ossClient.getObject (bucketName, fileName); Le fileName à l'intérieur est le nom du fichier, est-ce aliyuncs.com/ dans le chemin d'accès complet renvoyé ci-dessus? La chaîne devant! ! !
Si c'est clair, vous pouvez cliquer sur l'image sur Alibaba Cloud. Pour plus de détails, le nom de fichier ci-dessous est le nom de fichier ici. Si le téléchargement est réussi, écrivez le nom de fichier dans la base de données. Faites attention à l'interception! !
Si vous le montrez à l'avant, retournez: http://liaochao-sso.oss-cn-chengdu.aliyuncs.com/liaochao/2020-03016/xxx.jpg,
vous pouvez l'afficher sans point d'interrogation? Quelque chose derrière

@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();
            }
        }
    }
Effacer

FileName est-il identique à la suppression, est-il derrière .com? Partie 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 "删除成功!";
    }
A publié 67 articles originaux · A aimé12 · Plus de 10 000 visiteurs

Je suppose que tu aimes

Origine blog.csdn.net/m0_37635053/article/details/104955228
conseillé
Classement