Alibaba Cloud Object Storage Service (OSS) est une solution de stockage d'objets hautement disponible et sécurisée permettant de conserver et de récupérer d'importants volumes de données (images, vidéos, documents) via le réseau. Dans une architecture web classique, le serveur reçoit un fichier du client, le transmet à OSS, puis récupère une URL unique permettant d'accéder directement à la ressource.
Configuration de l'environnement Alibaba Cloud
Avant d'intégrer le service, plusieurs étapes administratives sont nécessaires sur la console Alibaba Cloud :
- Création d'un Bucket : Il s'agit du conteneur logique de vos fichiers. Lors de la création, il est crucial de définir la région (par exemple, Paris ou Pékin) et les droits d'accès. Pour un accès public aux images, le paramètre "Public Read" doit être activé après avoir désactivé le blocage des accès publics.
- Gestion des AccessKeys : Pour sécuriser les appels API, générez un
AccessKey IDet unAccessKey Secret. Ces identifiants agissent comme un couple utilisateur/mot de passe pour votre application. - Variables d'environnement : Par mesure de sécurité, évitez d'écrire les clés en dur. Configurez-les dans votre système : ```
set OSS_ACCESS_KEY_ID=votre_id
set OSS_ACCESS_KEY_SECRET=votre_secret
Intégration du SDK Java
Pour interagir avec OSS, ajoutez la dépendance suivante dans votre fichier pom.xml :
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
Si vous utilisez une version de Java supérieure ou égale à 9, les dépendances JAXB sont également requises pour le bon fonctionnement du SDK.
Exemple de code : Téléchargement d'un fichier
Voici comment implémenter une logique simple pour anvoyer un fichier local vers le cloud :
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import java.io.ByteArrayInputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
public class GestionnaireStockage {
public static void main(String[] args) throws Exception {
String pointAcces = "https://oss-cn-beijing.aliyuncs.com";
String nomBucket = "mon-espace-stockage";
String nomObjet = "images/profil_01.jpg";
// Récupération des identifiants via l'environnement
String cleId = System.getenv("OSS_ACCESS_KEY_ID");
String cleSecret = System.getenv("OSS_ACCESS_KEY_SECRET");
// Initialisation du client
OSS clientOss = new OSSClientBuilder().build(pointAcces, cleId, cleSecret);
try {
byte[] contenuFichier = Files.readAllBytes(Paths.get("C:/temp/photo.jpg"));
clientOss.putObject(nomBucket, nomObjet, new ByteArrayInputStream(contenuFichier));
System.out.println("Téléchargement réussi.");
} finally {
clientOss.shutdown();
}
}
}
Optimisation avec Spring Boot
Pour une maintenance efficace dans un projet industriel, il est déconseillé de laisser les paramètres de connexion dans le code Java. On privilégie l'externalisatoin dans le fichier application.yml.
Approche via @ConfigurationProperties
Cette méthode permet de mapper un bloc de configuration complet vers un objet Java (Bean), facilitant ainsi l'injection et la réutilisation.
Configuration YAML :
aliyun:
oss:
endpoint: https://oss-cn-beijing.aliyuncs.com
bucketName: mon-bucket-demo
regionId: cn-beijing
Classe de propriétés :
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssSettings {
private String endpoint;
private String bucketName;
private String regionId;
}
En utilisant l'annotation @ConfigurationProperties avec un préfixe, Spring Boot injecte automatiquemant les valeurs correspondantes. Il suffit ensuite d'injecter ce bean dans votre service de téléchargement pour accéder aux paramètres via des getters. Cette approche est nettement plus propre que l'utilisation multiple de @Value, car elle regroupe logiquement les paramètres liés au même service.
Workflow de l'API de téléchargement
- Le
Controllerreçoit un objetMultipartFile. - Le service extrait le nom original ou génère un nom unique pour éviter les collisions.
- Le fichier est poussé vers OSS via le SDK.
- L'URL publique du fichier (ex: https://bucket.oss-region.com/fichier.jpg) est générée et retournée au front-end pour affichage immédiat.