x-file-storage.dromara.org | x-file-storage.xuyanwu.cn |
Une ligne de code stocke les fichiers localement, FTP, SFTP, WebDAV, Alibaba Cloud OSS, Huawei Cloud OBS, Qiniu Cloud Kodo, Tencent Cloud COS, Baidu Cloud BOS, Youpai Cloud USS, MinIO, Amazon S3, Google Cloud Storage, FastDFS, Azure Stockage Blob, Cloudflare R2, Kingsoft Cloud KS3, Meituan Cloud MSS, JD Cloud OSS, Tianyi Cloud OOS, Mobile Cloud EOS, Woyun OSS, NetEase Shufan NOS, Ucloud US3, Qingyun QingStor, Ping An Cloud OBS, Shouyun OSS, IBM COS et autres plateformes de stockage compatibles avec le protocole S3. Afficher toutes les plates-formes de stockage prises en charge
Après vous être connecté à Alist via WebDAV, vous pouvez utiliser des services de stockage courants tels que Baidu Cloud Disk, Tianyi Cloud Disk, Alibaba Cloud Disk et Thunder Cloud Disk pour afficher les plates-formes de stockage prises en charge par Alist.
? Prend en charge la migration de fichiers entre différentes plates-formes de stockage, voir les fichiers de migration pour plus de détails.
GitHub : https://github.com/dromara/x-file-storage
Gîte : https://gitee.com/dromara/x-file-storage
Voici un bref enregistrement de mise à jour, consultez l'enregistrement de mise à jour détaillé
2.2.1
Correction du problème des erreurs de calcul de hachage dans certains cas et du problème de l'URL pré-signée de Qiniu Cloud Kodo étant inutilisable.
2.2.0
corrige un grand nombre de problèmes, ajoute de nouveaux fichiers, répertorie les fichiers, reconstruit les URL pré-signées, prend en charge le téléchargement, le téléchargement, la suppression et d'autres opérations client, ajoute le plug-in Solon, optimise les fonctions telles que le téléchargement manuel en plusieurs parties, vérifiez l'enregistrement de mise à jour pour plus de détails
2.1.0
corrige un grand nombre de problèmes, ajoute les plates-formes de stockage FastDFS et Azure Blob Storage, et ajoute des fonctions telles que la copie et le déplacement (renommage) de fichiers, le téléchargement manuel en plusieurs parties (téléchargement avec reprise) et le calcul des hachages. Veuillez vérifier l'enregistrement de mise à jour. pour plus de détails.
2.0.0
est offert à la communauté open source dromara, modifie le nom du projet, le nom du package, optimise la structure du projet, prend en charge les métadonnées, etc. Vous devez faire attention à la mise à niveau à partir de l'ancienne version. Veuillez vérifier l'enregistrement de mise à jour pour plus de détails. .
Cliquez sur Démarrage rapide pour voir comment utiliser toutes les plateformes de stockage !
Ici, nous prenons Alibaba Cloud OSS comme exemple. pom.xml
est introduit dans ce projet. La référence par défaut ici est l'environnement SpringBoot
. Solon
est utilisée séparément de SpringBoot.
<!-- 引入本项目 -->
< dependency >
< groupId >org.dromara.x-file-storage</ groupId >
< artifactId >x-file-storage-spring</ artifactId >
< version >2.2.1</ version >
</ dependency >
<!-- 引入 阿里云 OSS SDK,如果使用其它存储平台,就引入对应的 SDK -->
< dependency >
< groupId >com.aliyun.oss</ groupId >
< artifactId >aliyun-sdk-oss</ artifactId >
< version >3.16.1</ version >
</ dependency >
Ajoutez la configuration de base suivante au fichier de configuration application.yml
Concernant les différences entre les fichiers de configuration et les différents chemins (chemins) dans FileInfo, veuillez vous référer à la foire aux questions
dromara :
x-file-storage : #文件存储配置
default-platform : aliyun-oss-1 #默认使用的存储平台
aliyun-oss :
- platform : aliyun-oss-1 # 存储平台标识
enable-storage : true # 启用存储
access-key : ??
secret-key : ??
end-point : ??
bucket-name : ??
domain : ?? # 访问域名,注意“/”结尾,例如:https://abc.oss-cn-shanghai.aliyuncs.com/
base-path : test/ # 基础路径
Ajoutez l'annotation @EnableFileStorage
à la classe de démarrage
@ EnableFileStorage
@ SpringBootApplication
public class SpringFileStorageTestApplication {
public static void main ( String [] args ) {
SpringApplication . run ( SpringFileStorageTestApplication . class , args );
}
}
Prend en charge File, MultipartFile, UploadedFile, byte[], InputStream, URL, URI, String, HttpServletRequest et les fichiers volumineux seront automatiquement téléchargés en plusieurs parties. Si vous souhaitez prendre en charge plus de méthodes, veuillez lire le chapitre sur l'adaptateur de fichiers
@ RestController
public class FileDetailController {
@ Autowired
private FileStorageService fileStorageService ; //注入实列
/**
* 上传文件
*/
@ PostMapping ( "/upload" )
public FileInfo upload ( MultipartFile file ) {
//只需要这一行代码即可上传成功
return fileStorageService . of ( file ). upload ();
}
/**
* 上传文件,成功返回文件 url
*/
@ PostMapping ( "/upload2" )
public String upload2 ( MultipartFile file ) {
FileInfo fileInfo = fileStorageService . of ( file )
. setPath ( "upload/" ) //保存到相对路径下,为了方便管理,不需要可以不写
. setSaveFilename ( "image.jpg" ) //设置保存的文件名,不需要可以不写,会随机生成
. setObjectId ( "0" ) //关联对象id,为了方便管理,不需要可以不写
. setObjectType ( "0" ) //关联对象类型,为了方便管理,不需要可以不写
. putAttr ( "role" , "admin" ) //保存一些属性,可以在切面、保存上传记录、自定义存储平台等地方获取使用,不需要可以不写
. upload (); //将文件上传到对应地方
return fileInfo == null ? "上传失败!" : fileInfo . getUrl ();
}
/**
* 上传图片,成功返回文件信息
* 图片处理使用的是 https://github.com/coobird/thumbnailator
*/
@ PostMapping ( "/upload-image" )
public FileInfo uploadImage ( MultipartFile file ) {
return fileStorageService . of ( file )
. image ( img -> img . size ( 1000 , 1000 )) //将图片大小调整到 1000*1000
. thumbnail ( th -> th . size ( 200 , 200 )) //再生成一张 200*200 的缩略图
. upload ();
}
/**
* 上传文件到指定存储平台,成功返回文件信息
*/
@ PostMapping ( "/upload-platform" )
public FileInfo uploadPlatform ( MultipartFile file ) {
return fileStorageService . of ( file )
. setPlatform ( "aliyun-oss-1" ) //使用指定的存储平台
. upload ();
}
/**
* 直接读取 HttpServletRequest 中的文件进行上传,成功返回文件信息
* 使用这种方式有些注意事项,请查看文档 基础功能-上传 章节
*/
@ PostMapping ( "/upload-request" )
public FileInfo uploadPlatform ( HttpServletRequest request ) {
return fileStorageService . of ( request ). upload ();
}
}
//手动构造文件信息,可用于其它操作
FileInfo fileInfo = new FileInfo ()
. setPlatform ( "huawei-obs-1" )
. setBasePath ( "test/" )
. setPath ( "aa/" )
. setFilename ( "image.png" )
. setThFilename ( "image.png.min.jpg" );
//文件是否存在
boolean exists = fileStorageService . exists ( fileInfo );
//下载
byte [] bytes = fileStorageService . download ( fileInfo ). bytes ();
//删除
fileStorageService . delete ( fileInfo );
//其它更多操作
Si vous enregistrez l'enregistrement du fichier dans la base de données, vous pouvez également opérer plus facilement en fonction de l'URL. Pour plus de détails, veuillez lire le chapitre sur l'enregistrement des enregistrements de téléchargement.
//直接从数据库中获取 FileInfo 对象,更加方便执行其它操作
FileInfo fileInfo = fileStorageService . getFileInfoByUrl ( "https://abc.def.com/test/aa/image.png" );
//文件是否存在
boolean exists = fileStorageService . exists ( "https://abc.def.com/test/aa/image.png" );
//下载
byte [] bytes = fileStorageService . download ( "https://abc.def.com/test/aa/image.png" ). bytes ();
//删除
fileStorageService . delete ( "https://abc.def.com/test/aa/image.png" );
//其它更多操作
Cliquez sur Démarrage rapide pour voir comment utiliser toutes les plateformes de stockage !
Le code source de X File Storage est divisé en deux branches, avec les fonctions suivantes :
bifurquer | effet |
---|---|
principal | La branche principale, la branche utilisée par la version release, est cohérente avec le jar soumis par la bibliothèque centrale et ne reçoit aucune PR ni modification. |
développeur | Branche de développement, accepter les modifications ou PR |
Lorsque vous soumettez des commentaires sur un problème, veuillez indiquer la version de X File Storage, la version de la bibliothèque dépendante associée, les paramètres de configuration et le code du problème.
Problème de gîte
Problème GitHub
Tout le monde est invité à contribuer à X File Storage et à contribuer au code Pour faciliter l'utilisation et la maintenabilité, le PR (pull request) qui doit être soumis doit être conforme à certaines spécifications.
X File Storage remercie tout le monde pour votre confiance et votre soutien. Si vous avez utilisé X File Storage dans votre projet, j'espère que vous pourrez laisser les informations de votre entreprise ou de votre organisation (nom de l'entreprise ou de l'organisation, adresse du site officiel, image du logo d'affichage).
Les informations de votre entreprise seront affichées sur le site officiel du projet :
x-file-storage.dromara.org
x-file-storage.xuyanwu.cn
spring-file-storage.xuyanwu.cn
Inscrivez-vous sur Gitee Inscrivez-vous sur GitHub
Si vous pensez que ce projet est bon, vous pouvez cliquer sur une étoile ou faire un don pour offrir à l'auteur des lanières épicées ~ Si vous ne voulez pas de récompense, vous pouvez scanner le dernier code avec Alipay pour recevoir une enveloppe rouge. je tiens à exprimer ma gratitude ^_^
Ou cliquez sur le lien ci-dessous, faites défiler vers le bas de la page et cliquez sur « Faire un don »
Faire un don sur Gitee
Scannez le code QR ci-dessus pour faire un don de 99 yuans et envoyez-moi la capture d'écran QQ1171736840
pour rejoindre le groupe de communication VIP (s'il dépasse un an, vous devez faire un nouveau don, sinon il sera effacé)
Vous pouvez également cliquer pour ajouter un groupe de communication gratuit pour communiquer ensemble