Привет всем, я Букай Чен~
Совет: не переключайтесь между несколькими блогами. Эта статья уникальна и сочетает в себе сильные стороны многих блогов. Если вы столкнулись с ошибкой, внимательно прочитайте статью и не игнорируйте ее. Когда я писал, поскольку многие статьи не были исчерпывающими, я столкнулся со многими ловушками, прыгая взад и вперед. Надеюсь, вы сможете их избежать, я отметил их все в этой статье, чтобы напомнить вам! ! !
Официальный адрес сайта:
https://min.io/
Адрес документа:
https://docs.min.io/
Адрес исходного кода этого документа (бесплатный ресурс):
https://download.csdn.net/download/weixin_53742691/87856930
Minio — это сервер объектного хранилища с открытым исходным кодом, который может работать в различных операционных системах, включая Linux, Windows и MacOS. Он предоставляет простое, масштабируемое и высокодоступное решение для хранения объектов, поддерживающее несколько форматов данных, включая объекты, блоки и файлы.
Вот основные особенности Minio:
Короче говоря, Minio — это мощный, гибкий и масштабируемый сервер объектного хранения, подходящий для различных сценариев применения, включая облачное хранилище, хранилище больших данных и Интернет вещей.
MinIO — это высокопроизводительная масштабируемая объектная система хранения данных, которую можно применять во многих сценариях приложений, включая, помимо прочего, следующие:
Следует отметить, что перечисленные выше сценарии применения не являются всеми применимыми сценариями для MinIO. Это зависит от деталей и потребностей каждого варианта использования.
Использование SpringBoot и MinIO для реализации многочастной загрузки, второй загрузки и возобновления загрузки в основном включает в себя следующие шаги:
Вообще говоря, использовать SpringBoot и MinIO для реализации многочастной загрузки, второй загрузки и возобновления загрузки несложно. Его можно разработать и реализовать в соответствии с описанными выше шагами.
mkdir minio
Всем следует отметить, что сначала нам нужно установить docker. Соответствующие руководства по установке вы можете прочитать в моих предыдущих статьях и следовать инструкциям шаг за шагом. Я не буду здесь вдаваться в подробности! ! !
docker search minio
docker pull minio/minio
docker images
docker run -p 9000:9000 -p 9090:9090 --net=host --name minio -d --restart=always -e "MINIO_ACCESS_KEY=IT@WangHui" -e "MINIO_SECRET_KEY=IT@WangHui" minio/minio server /data --console-address ":9000" -address ":9090"
Обратите внимание, что существуют требования к надежности пароля, в противном случае будет сообщено об ошибке.
Это команда Docker для запуска контейнера MinIO. Конкретные параметры объясняются следующим образом:
MINIO_ACCESS_KEY
и MINIO_SECRET_KEY
,ценить соответственно IT@WangHui
и IT@WangHui
。/data
Каталог монтируется на хост-компьютере /data
в каталоге.Совет: Доступ к странице 9000, код 9090. Совет: Доступ к странице 9000, код 9090. Совет: Доступ к странице 9000, код 9090.
Основная причина заключается в том, что при запуске контейнера докера или выполнении настройки докера также настраиваются параметры брандмауэра и перезапуск, что приводит к очистке конфигурации, связанной с докером, в результате чего цепочка докеров не отображается при запросе правил брандмауэра. iptables -L запрашивает цепочку iptables.
Это вызвано перезапуском firewalld, а перезапуск docker восстановит зарегистрированную цепочку iptables.
Затем удалите контейнер, который только что не удалось запустить, иначе он продолжит сообщать, что контейнер уже существует.
systemctl restart docker #Перезапускаем докер
docker ps -a #view runконтейнер
docker rm -f minio #Удалить контейнер по названию контейнера (обратите внимание на идентификацию своего)
Доступ в браузере после запускаhttp://localhost:9000
вы можете получить доступminioграфический интерфейс,Как показано на рисунке:
Если доступ не удался, это проблема брандмауэра или не добавлены последние два параметра параметров запуска. Других проблем не будет, если только контейнер не запустится успешно.
Чтобы просмотреть выпущенные порты, вы можете использовать следующую команду
firewall-cmd --list-ports
Чтобы освободить порты 9000 и 9090 в CentOS 7, вы можете выполнить следующие действия:
Проверьте состояние брандмауэра с помощью следующей команды:
systemctl status firewalld
Если брандмауэр остановлен, запустите его:
systemctl start firewalld
Разрешите TCP-трафик через порт 9000, используя следующую команду:
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9090/tcp --permanent
Это добавит в брандмауэр правило, разрешающее TCP-трафик через порт 9000. Чтобы сохранить это изменение навсегда, выполните следующую команду:
firewall-cmd --reload
Перезапустите службу брандмауэра, используя следующую команду:
systemctl restart firewalld
Теперь вы успешно освободили порты 9000 и 9090 в CentOS 7.
<!-- действоватьminioизjavaклиент-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
</dependency>
<!-- действоватьminioизjavaклиент-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
<!-- jwtАутентификация зависит от-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
</dependency>
server:
port: 8080
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
#minioКонфигурация
minio:
access-key: dAMaxkWaXUD1CV1JHbqw
secret-key: AXt3SD0JFkDENFbMeJKOOQb5wj8KvabZWu33Rs84
url: http://192.168.18.14:9090 #Адрес доступа
bucket-name: wanghui
Первый — это конфигурация сервера:
multipart/form-data
добрыйформаизпросить。multipart/form-data
добрыйформаизпросить时,встреча Волязагрузитьиздокумент Размер ограничен10MBв пределах,И ограничьте размер запроса до 10 МБ.Далее идет настройка minio:
access-key
иsecret-key
это визитminioСлужитьизсертификат,Его необходимо заполнить в соответствии с реальной ситуацией.bucket-name
дахранилищедокументизведроимя,Его необходимо заполнить в соответствии с реальной ситуацией.package com.xiaohui.utils;
/**
* @Description статус HTTP-запроса
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/01
*/
public class HttpStatus
{
/**
* Операция прошла успешно
*/
public static final int SUCCESS = 200;
/**
* объект успешно создан
*/
public static final int CREATED = 201;
/**
* Запрос принят
*/
public static final int ACCEPTED = 202;
/**
* Операция выполнена успешно, но данные не возвращены.
*/
public static final int NO_CONTENT = 204;
/**
* Ресурс удален
*/
public static final int MOVED_PERM = 301;
/**
* Перенаправление
*/
public static final int SEE_OTHER = 303;
/**
* Ресурс не был изменен
*/
public static final int NOT_MODIFIED = 304;
/**
* Неверный список параметров (отсутствует, несоответствие формата)
*/
public static final int BAD_REQUEST = 400;
/**
* Несанкционированный
*/
public static final int UNAUTHORIZED = 401;
/**
* Доступ ограничен, срок авторизации истек
*/
public static final int FORBIDDEN = 403;
/**
* Ресурс, сервис не найден
*/
public static final int NOT_FOUND = 404;
/**
* Запрещенный http-метод
*/
public static final int BAD_METHOD = 405;
/**
* Конфликт ресурсов или ресурс заблокирован
*/
public static final int CONFLICT = 409;
/**
* Неподдерживаемые данные, тип носителя
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
* Внутренняя ошибка системы
*/
public static final int ERROR = 500;
/**
* интерфейс не реализован
*/
public static final int NOT_IMPLEMENTED = 501;
/**
* Системное предупреждающее сообщение
*/
public static final int WARN = 601;
}
package com.xiaohui.utils;
import io.jsonwebtoken.Claims;
/**
* @Description Общая постоянная информация
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/01
*/
public class Constants
{
/**
* UTF-8 набор символов
*/
public static final String UTF8 = "UTF-8";
/**
* GBK набор символов
*/
public static final String GBK = "GBK";
/**
* www основной домен
*/
public static final String WWW = "www.";
/**
* HTTP-запрос
*/
public static final String HTTP = "http://";
/**
* https-запрос
*/
public static final String HTTPS = "https://";
/**
* универсальный знак успеха
*/
public static final String SUCCESS = "0";
/**
* Общий флаг отказа
*/
public static final String FAIL = "1";
/**
* Вход успешен
*/
public static final String LOGIN_SUCCESS = "Success";
/**
* Выйти
*/
public static final String LOGOUT = "Logout";
/**
* зарегистрироваться
*/
public static final String REGISTER = "Register";
/**
* Ошибка входа
*/
public static final String LOGIN_FAIL = "Error";
/**
* Срок действия проверочного кода (минуты)
*/
public static final Integer CAPTCHA_EXPIRATION = 2;
/**
* жетон
*/
public static final String TOKEN = "token";
/**
* жетонпрефикс
*/
public static final String TOKEN_PREFIX = "Bearer ";
/**
* жетонпрефикс
*/
public static final String LOGIN_USER_KEY = "login_user_key";
/**
* ID пользователя
*/
public static final String JWT_USERID = "userid";
/**
* Имя пользователя
*/
public static final String JWT_USERNAME = Claims.SUBJECT;
/**
* Аватар пользователя
*/
public static final String JWT_AVATAR = "avatar";
/**
* время создания
*/
public static final String JWT_CREATED = "created";
/**
* Разрешения пользователя
*/
public static final String JWT_AUTHORITIES = "authorities";
/**
* Путь сопоставления ресурсов префикс
*/
public static final String RESOURCE_PREFIX = "/profile";
/**
* RMI удаленный вызов метода
*/
public static final String LOOKUP_RMI = "rmi:";
/**
* LDAP удаленный вызов метода
*/
public static final String LOOKUP_LDAP = "ldap:";
/**
* LDAPS удаленный вызов метода
*/
public static final String LOOKUP_LDAPS = "ldaps:";
/**
* Белый список запланированных задач Конфигурация (только те имена пакетов, к которым разрешен доступ, вы можете добавить их самостоятельно, если вам нужно что-то еще)
*/
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };
/**
* Персонажи, нарушающие запланированные задания
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
}
package com.xiaohui.config;
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description minioКонфигурация
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.minio")
public class MinioConfig {
private String accessKey;
private String secretKey;
private String url;
private String bucketName;
@Bean
public MinioClient minioClient(){
return MinioClient.builder()
.endpoint(url)
.credentials(accessKey,secretKey)
.build();
}
}
Этот код представляет собой класс конфигурации в Java, используемый для настройки свойств, связанных с MinIO (службой хранения объектов). Конкретно:
@Configuration
В аннотации указано, что этодаодин Конфигурациядобрый,Используется для внедрения свойств, определенных в этом классе, в другие компоненты.@ConfigurationProperties
В аннотации указано, чтодобрыйиспользовалspring.minio.*
префиксизатрибуты приходят КонфигурацияMinioСвязанныйизсвойство。@Data
Аннотации генерируются автоматическиgetterиsetterметод,Упрощенное написание кода.accessKey
иsecretKey
Атрибуты соответственно представляют собой ключи доступа.иключценить,Используется для подключения к сервису MinIO.bucketName
Представление атрибутахранилище Название сегмента。@Bean
В аннотации указано, чтоminioClient()
методвозвращатьсяизобъектзарегистрироватьсядляbean,для использования в других компонентах.minioClient()
методвернулMinioClient
объект,Используется для подключения к сервисам MinIO и работы с сегментами хранилища. в,endpoint()
методиспользуется длянастраиватьMinIOСлужитьизURLадрес,credentials()
методиспользуется длянастраиватьдоступключиключценить。package com.xiaohui.utils;
import com.xiaohui.config.MinioConfig;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import lombok.SneakyThrows;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @Description Минио инструменты
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@Component
public class MinioUtils {
@Autowired
private MinioClient minioClient;
@Autowired
private MinioConfig configuration;
/**
* @param name имя
* @return boolean
* @Description description: Определить, существует ли ведро, создать его, если оно не существует.
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public boolean existBucket(String name) {
boolean exists;
try {
exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
exists = true;
}
} catch (Exception e) {
e.printStackTrace();
exists = false;
}
return exists;
}
/**
* @param bucketName хранилищеbucketимя * @return {@link Boolean }
* @Description создаватьхранилищеbucket * @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public Boolean makeBucket(String bucketName) {
try {
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* @param bucketName хранилищеbucketимя * @return {@link Boolean }
* @Description удалитьхранилищеbucket * @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public Boolean removeBucket(String bucketName) {
try {
minioClient.removeBucket(RemoveBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* @param fileName Имя файла
* @param time время
* @return {@link Map }
* @Description Получить временную подпись для загрузки
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@SneakyThrows
public Map getPolicy(String fileName, ZonedDateTime time) {
PostPolicy postPolicy = new PostPolicy(configuration.getBucketName(), time);
postPolicy.addEqualsCondition("key", fileName);
try {
Map<String, String> map = minioClient.getPresignedPostFormData(postPolicy);
HashMap<String, String> map1 = new HashMap<>();
map.forEach((k, v) -> {
map1.put(k.replaceAll("-", ""), v);
});
map1.put("host", configuration.getUrl() + "/" + configuration.getBucketName());
return map1;
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
}
return null;
}
/**
* @param objectName объектимя * @param method метод
* @param time время
* @param timeUnit времяединица
* @return {@link String }
* @Description Получить URL загруженного файла
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public String getPolicyUrl(String objectName, Method method, int time, TimeUnit timeUnit) {
try {
return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(method)
.bucket(configuration.getBucketName())
.object(objectName)
.expiry(time, timeUnit).build());
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
}
return null;
}
/**
* @param file документ
* @param fileName Имя файла
* @Description загрузитьдокумент
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public void upload(MultipartFile file, String fileName) {
// Используйте putObject для загрузки документа в корзину хранилища.
try {
InputStream inputStream = file.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket(configuration.getBucketName())
.object(fileName)
.stream(inputStream, file.getSize(), -1)
.contentType(file.getContentType())
.build());
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
}
}
/**
* @param objectName объектимя * @param time время
* @param timeUnit времяединица
* @return {@link String }
* @Description в соответствии сfilenameполучатьдокументдоступадрес
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public String getUrl(String objectName, int time, TimeUnit timeUnit) {
String url = null;
try {
url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(configuration.getBucketName())
.object(objectName)
.expiry(time, timeUnit).build());
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
}
return url;
}
/**
* @param fileName
* @return {@link ResponseEntity }<{@link byte[] }>
* @Description description: скачатьдокумент
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public ResponseEntity<byte[]> download(String fileName) {
ResponseEntity<byte[]> responseEntity = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try {
in = minioClient.getObject(GetObjectArgs.builder().bucket(configuration.getBucketName()).object(fileName).build());
out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
//Инкапсулируем возвращаемое значение
byte[] bytes = out.toByteArray();
HttpHeaders headers = new HttpHeaders();
try {
headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
headers.setContentLength(bytes.length);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setAccessControlExposeHeaders(Arrays.asList("*"));
responseEntity = new ResponseEntity<byte[]>(bytes, headers, HttpStatus.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseEntity;
}
/**
* @param objectFile объектдокумент
* @return {@link String }
* @Description в соответствии сдокументимяиведрополучатьдокументпуть
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
public String getFileUrl(String objectFile) {
try {
return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(configuration.getBucketName())
.object(objectFile)
.build()
);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Этот код представляет собой класс инструментов для загрузки и скачивания файлов с использованием службы объектного хранилища Alibaba Cloud (OSS). Конкретные функции заключаются в следующем:
getPolicy(String fileName, ZonedDateTime time)
:в соответствии сдокументимяивремяштамп Получить временную подпись для загрузки。getPolicyUrl(String objectName, Method method, int time, TimeUnit timeUnit)
:Получить URL загруженного файла。upload(MultipartFile file, String fileName)
:Волядокументзагрузить вOSSсередина。getUrl(String objectName, int time, TimeUnit timeUnit)
:получатьдокументизскачатьurl。Типы перечислений используются в коде для определения различных методов загрузки и скачивания.
Аннотации используются@Autowired
от автоматического впрыскаMinioClient
объект。
Этот класс инструментов не предоставляет механизма обработки исключений и его необходимо дополнять в соответствии с реальной ситуацией.
/**
* @Description результаты ajax
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/01
*/
public class AjaxResult extends HashMap<String, Object>
{
private static final long serialVersionUID = 1L;
/** код состояния */
public static final String CODE_TAG = "code";
/** Возврат контента */
public static final String MSG_TAG = "msg";
/** данныеобъект */
public static final String DATA_TAG = "data";
/**
* Инициализировать вновь созданный AjaxResult объект, что делает его пустым сообщением.
*/
public AjaxResult()
{
}
/**
* Инициализировать вновь созданный AjaxResult объект
*
* @param code код состояния
* @param msg Возврат контента
*/
public AjaxResult(int code, String msg)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
}
/**
* Инициализировать вновь созданный AjaxResult объект
*
* @param code код состояния
* @param msg Возврат контента
* @param data данныеобъект
*/
public AjaxResult(int code, String msg, Object data)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
if (data!=null)
{
super.put(DATA_TAG, data);
}
}
/**
* Вернуть сообщение об успехе
*
* @return сообщение об успехе
*/
public static AjaxResult success()
{
return AjaxResult.success("Операция прошла успешно");
}
/**
* Возвращение успешных
*
* @return сообщение об успехе
*/
public static AjaxResult success(Object data)
{
return AjaxResult.success("Операция прошла успешно", data);
}
/**
* Вернуть сообщение об успехе
*
* @param msg Возврат контента
* @return сообщение об успехе
*/
public static AjaxResult success(String msg)
{
return AjaxResult.success(msg, null);
}
/**
* Вернуть сообщение об успехе
*
* @param msg Возврат контента
* @param data данныеобъект
* @return сообщение об успехе
*/
public static AjaxResult success(String msg, Object data)
{
return new AjaxResult(HttpStatus.SUCCESS, msg, data);
}
/**
* Возврат предупреждающего сообщения
*
* @param msg Возврат контента
* @return предупреждающее сообщение
*/
public static AjaxResult warn(String msg)
{
return AjaxResult.warn(msg, null);
}
/**
* Возврат предупреждающего сообщения
*
* @param msg Возврат контента
* @param data данныеобъект
* @return предупреждающее сообщение
*/
public static AjaxResult warn(String msg, Object data)
{
return new AjaxResult(HttpStatus.WARN, msg, data);
}
/**
* Возврат сообщения об ошибке
*
* @return сообщение об ошибке
*/
public static AjaxResult error()
{
return AjaxResult.error("Операция не удалась");
}
/**
* Возврат сообщения об ошибке
*
* @param msg Возврат контента
* @return сообщение об ошибке
*/
public static AjaxResult error(String msg)
{
return AjaxResult.error(msg, null);
}
/**
* Возврат сообщения об ошибке
*
* @param msg Возврат контента
* @param data данныеобъект
* @return сообщение об ошибке
*/
public static AjaxResult error(String msg, Object data)
{
return new AjaxResult(HttpStatus.ERROR, msg, data);
}
/**
* Возврат сообщения об ошибке
*
* @param code код состояния
* @param msg Возврат контента
* @return сообщение об ошибке
*/
public static AjaxResult error(int code, String msg)
{
return new AjaxResult(code, msg, null);
}
/**
* Удобный цепной вызов
*
* @param key ключ
* @param value ценить
* @return данныеобъект
*/
@Override
public AjaxResult put(String key, Object value)
{
super.put(key, value);
return this;
}
}
package com.xiaohui.controller;
import com.xiaohui.utils.AjaxResult;
import com.xiaohui.utils.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
/**
* @Description контроллер загрузки мини-документов
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@CrossOrigin
@RestController
@RequestMapping("/api")
public class MinioFileUploadController {
@Autowired
private MinioUtils minioUtils;
/**
* @param file документ
* @param fileName Имя файла
* @return {@link AjaxResult }
* @Description загрузитьдокумент
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@GetMapping("/upload")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, String fileName) {
minioUtils.upload(file, fileName);
return AjaxResult.success("Загрузка прошла успешно");
}
/**
* @param fileName Имя файла
* @return {@link ResponseEntity }
* @Description dowloadдокумент
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@GetMapping("/dowload")
public ResponseEntity dowloadFile(@RequestParam("fileName") String fileName) {
return minioUtils.download(fileName);
}
/**
* @param fileName Имя файла
* @return {@link AjaxResult }
* @Description получатьдокументurl
* @Author IT-одноклассник Сяохуэй
* @Date 2023/06/02
*/
@GetMapping("/getUrl")
public AjaxResult getFileUrl(@RequestParam("fileName") String fileName){
HashMap map=new HashMap();
map.put("FileUrl",minioUtils.getFileUrl(fileName));
return AjaxResult.success(map);
}
}