1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dromara-x-file-storage

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
< h3 align="center">
	< img src="https://x-file-storage.xuyanwu.cn/assets/logo.svg" height="200px"  alt="Логотип"/><br />
	< span>Оригинальное название X Spring File Storage передано < a target="_blank" href="https://dromara.org/ru">Dromara< /a> открытому сообществу< /span>
< /h3>

< p align="center">
    < a target="_blank" href="https://x-file-storage.dromara.org">x-file-storage.dromara.org< /a> | 
	< a target="_blank" href="https://x-file-storage.xuyanwu.cn">x-file-storage.xuyanwu.cn< /a> | 
	< a target="_blank" href="https://spring-file-storage.xuyanwu.cn">spring-file-storage.xuyanwu.cn< /a>
< /p>

< p align="center">
	< a target="_blank" href="https://central.sonatype.com/search?q=org.dromara.x-file-storage">
		< img src="https://img.shields.io/maven-central/v/org.dromara.x-file-storage/x-file-storage-core.svg?label=Maven%20Central" />
	< /a>
	< a target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">
		< img src="https://img.shields.io/badge/license-Apache%202-green.svg" />
	< /a>
	< a target="_blank" href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">
		< img src="https://img.shields.io/badge/JDK-8+-blue.svg" />
	< /a>
	< a target="_blank" href='https://github.com/dromara/x-file-storage'>
		< img src="https://img.shields.io/github/stars/dromara/x-file-storage.svg?style=social" alt="GitHub stars"/>
	< /a>
    < a href='https://gitee.com/dromara/x-file-storage'>
        < img src='https://gitee.com/dromara/x-file-storage/badge/star.svg?theme=dark' alt='stars' />
    < /a>
    < br />
    < a href='https://jq.qq.com/?_wv=1027&k=eGfeNqka'>
        < img src='https://img.shields.io/badge/QQ%E7%BE%A4-515706495-orange' alt='515706495' />
    < /a>
    < a target="_blank" href='https://x-file-storage.xuyanwu.cn/#/?id=%E7%B4%A0%E6%98%93%E4%BA%A4%E6%B5%81%E7%9C%8B%E7%9B%98'>
        < img src='https://img.shields.io/badge/%D7%90%D7%95-%E4%B8%AD%E6%98%9F%E4%BA%A4%E6%B5%81%E7%9C%8B%E7%9B%98-brightgreen' alt='' />
    < /a>
< /p>

-------
### 📚 Введение
```Одной строчкой кода можно хранить файлы локально, FTP, SFTP, WebDAV, OSS Alibaba Cloud, OBS Huawei Cloud, KODO Qiniu Cloud, COS Tencent Cloud, BOS Baidu Cloud, USS Youzan Cloud, MinIO,
Amazon S3, Google Cloud Storage, FastDFS, Azure Blob Storage, Cloudflare R2, KS3 Kingsoft Cloud, MSS Meituan Cloud, OSS JD Cloud, OOS China Telecom Cloud, EOS Mobile Cloud, OSS Unicom Cloud,
NOS NetEase Sail, US3 UCloud, QingStor QingCloud, OBS Ping An Cloud, OSS First Cloud, IBM COS, а также другие платформы хранения, совместимые с протоколом S3. Посмотреть [все поддерживаемые платформы хранения](https://x-file-storage.xuyanwu.cn/#/storage-platforms)

```💡 После подключения к Alist через WebDAV можно использовать такие популярные службы хранения данных, как Baidu Yunpan, Tianyi Cloud Disk, Aliyun Disk, Thunder Network и другие. Подробнее о поддерживаемых платформах хранения данных смотрите [здесь](https://alist.nn.ci/zh/guide/webdav.html#webdav-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2).
```🚚 Поддерживается миграция файлов между различными платформами хранения данных. Подробнее смотрите [здесь](https://x-file-storage.xuyanwu.cn/#/Перемещение_файлов).

GitHub: https://github.com/dromara/x-file-storage  
Gitee: https://gitee.com/dromara/x-file-storage  

---

### 📜История обновлений

Здесь представлен краткий список обновлений. Для просмотра полной истории обновлений перейдите [здесь](https://x-file-storage.xuyanwu.cn/#/История_обновлений).`2.2.1` Исправлены несколько проблем, связанных с неправильным вычислением хэша в некоторых случаях, а также исправлено использование предварительно подписанных URL Qiniu Cloud Kodo [история обновлений](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_221)  
`2.2.0` Исправлены множественные ошибки, добавлены новые возможности получения файла, перечисления файлов, рефакторинг предварительно подписанных URL для поддержки клиентских операций загрузки, скачивания, удаления и других, добавлен плагин Solon, оптимизация функциональности ручного разделения файлов и вычисления хэшей [история обновлений](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_220)  
`2.1.0` Исправлены множественные ошибки, добавлены новые платформы хранения данных FastDFS и Azure Blob Storage, возможность копирования, перемещения (переименования) файлов, ручного разделения файлов (возобновление прерванной загрузки) и вычисления хэшей [история обновлений](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_210)  
`2.0.0` Проект перенесён в [dromara](https://dromara.org/zh) сообщество открытого программного обеспечения, переименованы проект и пакеты, оптимизирована структура проекта и поддержана работа с метаданными, при переходе с более ранней версии обратите внимание на изменения [история обновлений](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_200)---

### 📅 План обновлений

- Интеграция платформ хранения данных HDFS, VolcanoCloud TOS, Samba, NFS
- Добавление миниатюр
- Предварительная загрузка содержимого файла
- Добавление модуля Access для предоставления интерфейсов через протоколы HTTP, FTP, WebDAV и другие, что позволяет другим программам легко использовать данные
- Добавление файлов
- Разделенная загрузка
- Прямое вывод в поток ответа HttpServletResponse
- Другие дополнительные функции

---

### 📦 Как использовать

Перейдите [здесь](https://x-file-storage.xuyanwu.cn/#/быстрый_ввод) для просмотра методов использования всех платформ хранения данных!

#### 🔧 Настройка

Пример конфигурации для Alibaba Cloud OSS. В `pom.xml` добавьте этот проект, здесь используется среда `SpringBoot`, для среды `Solon` см. [здесь](https://x-file-storage.xuyanwu.cn/#/в_Solon_использование), для других сред - [здесь](https://x-file-storage.xuyanwu.cn/#/отделение_from_SpringBoot_использование).

```xml
<!-- Включение текущего проекта -->
<dependency>
    <groupId>org.dromara.x-file-storage</groupId>
   cq <artifactId>x-file-storage-spring</artifactId>
    <version>2.2.1</version>
</dependency>
<!-- Включение SDK OSS от Alibaba Cloud, если используется другой платформа хранения, то включите соответствующий SDK -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.16.1</version>
</dependency>

Добавьте следующие базовые конфигурации в файл application.yml.

---О различиях между путями (path) в конфигурационном файле и объекте FileInfo можно прочитать в разделе Часто задаваемые вопросы.

Здесь исправлены следующие моменты:

  • Удалены лишние пробелы после знаков пунктуации.
  • Корректно оформлены ссылки внутри текста.```yaml dromara: x-file-storage: # Настройки хранения файлов default-platform: aliyun-oss-1 # Указание используемой платформы хранения aliyun-oss: - platform: aliyun-oss-bk1 # Уникальный идентификатор платформы хранения enable-storage: true # Активация хранения access-key: ?? secret-key: ?? endpoint: ?? bucket-name: ?? domain: ?? # Домен доступа, обратите внимание на заключение строки "/", например: https://abc.oss-cn-shanghai.aliyuncs.com/ base-path: test/ # Базовый путь

#### 🔨Настройка

Добавьте аннотацию `@EnableFileStorage` к запускающему классу.

```java
@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 {
``````markdown
    @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(@RequestParam MultipartFile file) {
        return fileStorageService.of(file)
                .image(img -> img);
    }
size(1000, 1000));  // Устанавливаем размер изображения до 1000x1000
                     .thumbnail(th -> th.size(200, 200))  // Создаем миниатюру размером 200x200
                     .upload();
}
``````markdown
### Загрузка файла на указанный платформу хранения, успешный ответ возвращает информацию о файле

```java
/**
 * Загрузка файла на указанный платформу хранения, успешный ответ возвращает информацию о файле
 */
@PostMapping("/upload-platform")
public FileInfo uploadPlatform(@RequestParam MultipartFile file) {
    return fileStorageService.of(file)
            .setPlatform("aliyun-oss-1")    // Используется указанная платформа хранения
            .upload();
}
```

### Прямое чтение файла из HttpServletRequest для загрузки, успешный ответ возвращает информацию о файле

```java
/**
 * Прямое чтение файла из HttpServletRequest для загрузки, успешный ответ возвращает информацию о файле
 * При использовании этого метода следует обратиться к документации раздел "Основные возможности - Загрузка"
 */
@PostMapping("/upload-request")
public FileInfo uploadRequest(HttpServletRequest request) {
    return fileStorageService.of(request).upload();
}
```

#### 🎨 Другие операции

```java
// Ручное создание объекта FileInfo, используется для других операций
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, подробнее см. раздел [Сохранение записи о загрузке](https://x-file-storage.xuyanwu.cn/#/основные_функции?id=сохранение_записи_о_загрузке).

```java
// Прямое получение объекта 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");
// Другие операции
```Нажмите на [быстрый старт](https://x-file-storage.xuyanwu.cn/#/%D0%B1%D1%8A%D1%80%D1%8F%D1%81%D1%82_%D1%81%D1%82%D0%B0%D1%80%D1%82), чтобы узнать методы использования всех платформ хранения!

------

### 🏗️Добавьте свои камни и кирпичи

#### 🎋Описание ветвей

Исходный код X File Storage разделён на две ветви с следующими функциями:

| Ветка   | Описание                                               |
|--------|----------------------------------------------------|
| main   | Главная ветка, используемая для выпусков версий, совпадает с центральным репозиторием JAR, не принимает никаких PR или изменений |
| dev    | Разработка, принимает изменения или PR                                      |

#### 🐞Предоставление обратной связи по ошибкам или предложения

При отправке обратной связи по проблемам укажите версию X File Storage, версию зависимых библиотек, параметры конфигурации и проблемный код.

[Gitee issue](https://gitee.com/dromara/x-file-storage/issues)<br/>
[GitHub issue](https://github.com/dromara/x-file-storage/issues)

#### 🧬Шаги по предоставлению кода1. Создайте форк проекта на Gitee или GitHub в свой репозиторий.
2. Клонируйте форкнутый проект на ваш локальный компьютер.
3. Измените код (не забудьте работать с веткой `dev`).
4. После коммита запушьте изменения в свою ветку (`dev`).
5. Войдите на Gitee или GitHub, нажмите кнопку Pull Request на главной странице вашего профиля, заполните необходимую информацию и отправьте запрос.
6. Подождите до объединения вашего запроса.#### 🧬 Разработочные соглашения & Конфигурация
1. JDK 11+, Maven 3.8.1+
2. Стиль кода, текущий стиль кода контролируется через плагины `spotless-maven-plugin` + `palantir-java-format`, при сборке Maven код автоматически форматируется.
3. Во время разработки, IDE должны распознавать плагины `spotless-maven-plugin` + `palantir-java-format`, что требует установки плагина: [palantir-java-format](https://plugins.jetbrains.com/plugin/13180-palantir-java-format).

#### 📐 Принципы для PR
Добро пожаловать всем желающим улучшить X File Storage, предоставлять код, для удобства использования и поддержания качества, PR (Pull Request) должны соответствовать некоторым правилам, правила следуют ниже:

1. Логика должна быть понятной, комментарии полными, сложные участки кода должны иметь подробные пояснения, если возможно, добавьте юнит-тесты, также вы можете указать своё имя.
2. Отправляйте PR в ветку `dev`, ветка `main` не принимает никакие PR или изменения.
3. Если мы закрываем ваши issues или PR, проверьте ответы, мы будем давать объяснения в ответах.### 📋Зарегистрироваться как компания или организация
X File Storage благодарит вас за доверие и поддержку, если вы уже используете X File Storage в своих проектах. Пожалуйста, оставьте информацию о своей компании или организации (название компании или организации, адрес сайта, изображение логотипа). Компании будут представлены на официальном сайте проекта:

<a target="_blank" href="https://x-file-storage.dromara.org">x-file-storage.dromara.org</a>

<a target="_blank" href="https://x-file-storage.xuyanwu.cn">x-file-storage.xuyanwu.cn</a>

<a target="_blank" href="https://spring-file-storage.xuyanwu.cn">spring-file-storage.xuyanwu.cn</a>[Зарегистрироваться на Gitee](https://gitee.com/dromara/x-file-storage/issues/I83Q6R)<br/>
[Зарегистрироваться на GitHub](https://github.com/dromara/x-file-storage/issues/114)

-------
### 🌏 Знание планета

<img src="https://x-file-storage.xuyanwu.cn/assets/zsxq.png" height="200px" alt="Знание планета">

-------
### 💳 Донат
Если вам понравился этот проект, вы можете поставить звезду или сделать донат, чтобы автор мог купить пачку лапши. Если не хотите делать донат, то можно использовать Alipay, чтобы получить подарочный чек; за это большое спасибо ^_^

<img src="https://x-file-storage.xuyanwu.cn/assets/wx.png" height="300px" alt="WeChat"> <img src="https://x-file-storage.xuyanwu.cn/assets/zfb.jpg" height="300px" alt="Alipay"> <img src="https://x-file-storage.xuyanwu.cn/assets/zfb2.jpg" height="300px" alt="Alipay2">
<img src="https://x-file-storage.xuyanwu.cn/assets/elm.jpg" height="300px" alt="Эле-Мэ"> <img src="https://x-file-storage.xuyanwu.cn/assets/mt.jpeg" height="300px" alt="Meituan Waimai">

Или нажмите следующие ссылки, прокрутите страницу вниз до конца и нажмите "Донат"

[Донат на Gitee](https://gitee.com/dromara/x-file-storage)

-------
# 🌶️ VIP Общение группа

Сканируйте QR-код выше, сделайте донат 99 юаней, сделайте скриншот и отправьте мне `QQ1171736840`, чтобы присоединиться к VIP группе общения (если срок более года, потребуется повторный донат, иначе вас могут удалить).

Вы также можете нажать, чтобы добавить бесплатную группу общения
<a target="_blank" href='https://jq.qq.com/?_wv=1027&k=eGfeNqka'>
<img src='https://img.shields.io/badge/QQ%E7%BE%A4-515706495-orange' alt='515706495' />
</a> вместе общаться

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Одна строка кода позволяет сохранить файл на следующих платформах: локальный компьютер, FTP, SFTP, WebDAV, Google Cloud, Alibaba Cloud OSS, Huawei Cloud OBS, Qiniu Cloud Kodo, Tencent Cloud COS, Baidu Cloud BOS, Youpai Cloud USS, MinIO, AWS S3, FastDFS, Azure Blob Storage, Kingsoft Cloud KS3, Meituan Cloud MSS, JD Cloud OSS, Tianyi Cloud OOS, Mo... Развернуть Свернуть
Java
Apache-2.0
Отмена

Обновления (17)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dromara-x-file-storage.git
git@api.gitlife.ru:oschina-mirror/dromara-x-file-storage.git
oschina-mirror
dromara-x-file-storage
dromara-x-file-storage
main