x-файл-хранилище.dromara.org | x-файл-хранилище.xuyanwu.cn | пружинный-файл-хранилище.xuyanwu.cn |
Одна строка кода хранит файлы локально, 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 Хранилище BLOB-объектов, Cloudflare R2, Kingsoft Cloud KS3, Meituan Cloud MSS, JD Cloud OSS, Tiani Cloud OOS, Mobile Cloud EOS, Woyun OSS, NetEase Shufan NOS, Ucloud US3, Qingyun QingStor, Ping An Cloud OBS, Shouyun OSS, IBM COS и другие платформы хранения, совместимые с протоколом S3. Просмотреть все поддерживаемые платформы хранения
После подключения к Alist через WebDAV вы можете использовать распространенные службы хранения, такие как Baidu Cloud Disk, Tiani Cloud Disk, Alibaba Cloud Disk и Thunder Cloud Disk, для просмотра платформ хранения, поддерживаемых Alist.
? Поддерживает миграцию файлов между различными платформами хранения, подробности см. в разделе «Файлы миграции».
GitHub: https://github.com/dromara/x-file-storage.
Гите: https://gitee.com/dromara/x-file-storage
Вот краткая запись обновления, просмотрите подробную запись обновления
2.2.1
Исправлена проблема с ошибками расчета хеша в некоторых случаях и проблема с невозможностью использования предварительно подписанного URL-адреса Qiniu Cloud Kodo.
2.2.0
исправляет большое количество проблем, добавляет новые файлы, выводит списки файлов, восстанавливает предварительно подписанные URL-адреса, поддерживает загрузку, загрузку, удаление и другие операции клиента, добавляет плагин Solon, оптимизирует такие функции, как ручная загрузка нескольких частей, проверьте запись обновления для получения подробной информации
2.1.0
исправлено большое количество проблем, добавлены платформы хранения FastDFS и хранилище BLOB-объектов Azure, а также такие функции, как копирование и перемещение (переименование) файлов, ручная многочастная загрузка (возобновляемая загрузка) и расчет хэшей. Проверьте запись обновления. для получения подробной информации.
2.0.0
передана в дар сообществу с открытым исходным кодом Dromara, меняет имя проекта, имя пакета, оптимизирует структуру проекта, поддерживает метаданные метаданных и т. д. Вам необходимо обратить внимание на обновление со старой версии. Подробную информацию см. в записи обновления. .
Нажмите «Быстрый старт», чтобы узнать, как использовать все платформы хранения данных!
В качестве примера мы возьмем Alibaba Cloud OSS. В этом проекте используется pom.xml
. По умолчанию здесь используется среда SpringBoot
. Solon
ссылки на среду используются отдельно от 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 >
Добавьте следующую базовую конфигурацию в файл конфигурации application.yml
По поводу различий между файлами конфигурации и различными путями (путями) в FileInfo, пожалуйста, обратитесь к Часто задаваемым вопросам.
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/ # 基础路径
Добавьте аннотацию @EnableFileStorage
в класс запуска.
@ EnableFileStorage
@ SpringBootApplication
public class SpringFileStorageTestApplication {
public static void main ( String [] args ) {
SpringApplication . run ( SpringFileStorageTestApplication . class , args );
}
}
Поддерживает File, MultipartFile, UploadedFile, byte[], InputStream, URL, URI, String, HttpServletRequest. Большие файлы будут автоматически загружаться частями. Если вы хотите поддерживать больше методов, прочтите главу об адаптере файла.
@ 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 );
//其它更多操作
Если вы сохраните запись файла в базе данных, вам также будет удобнее работать на основе URL-адреса. Подробную информацию см. в главе о сохранении записей загрузки.
//直接从数据库中获取 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" );
//其它更多操作
Нажмите «Быстрый старт», чтобы узнать, как использовать все платформы хранения данных!
Исходный код X File Storage разделен на две ветви со следующими функциями:
ветвь | эффект |
---|---|
основной | Основная ветка, используемая в релизной версии, соответствует jar-файлу, отправленному центральной библиотекой, и не подвергается никаким PR или изменениям. |
разработчик | Ветка разработки, принимать изменения или PR |
При отправке отзыва о проблеме укажите версию X File Storage, версию связанной зависимой библиотеки, параметры конфигурации и код проблемы.
проблема с гите
Проблема с GitHub
Любой желающий может внести свой вклад в хранилище X-файлов и внести свой код. Для простоты использования и удобства обслуживания отправляемый PR (запрос на извлечение) должен соответствовать следующим спецификациям:
X File Storage благодарит всех за доверие и поддержку. Если вы использовали X File Storage в своем проекте, я надеюсь, что вы сможете оставить информацию о своей компании или организации (название компании или организации, официальный адрес веб-сайта, отобразить изображение логотипа).
Информация о вашей компании будет отображаться на официальном сайте проекта:
x-file-storage.dromara.org
x-file-storage.xuyanwu.cn
весна-файл-хранилище.xuyanwu.cn
Зарегистрируйтесь на Gitee Зарегистрируйтесь на GitHub
Если вы считаете, что этот проект хорош, вы можете нажать звездочку или сделать пожертвование, чтобы угостить автора острыми полосками~. Если вы не хотите получать вознаграждение, вы можете отсканировать последний код с помощью Alipay и получить красный конверт. хочу выразить свою благодарность ^_^
Или нажмите на ссылку ниже, прокрутите страницу вниз и нажмите «Пожертвовать».
Пожертвовать на Gitee
Отсканируйте QR-код выше, чтобы пожертвовать 99 юаней, и отправьте мне скриншот QQ1171736840
чтобы присоединиться к VIP-группе общения (если срок превышает один год, вам необходимо сделать пожертвование еще раз, в противном случае оно будет очищено)
Вы также можете нажать, чтобы добавить бесплатную группу общения для совместного общения.