<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java整合minio實(shí)現(xiàn)文件預(yù)覽上傳和下載

      minio 在windows系統(tǒng)安裝和使用

      最近在使用minio做圖片存儲(chǔ),在使用過程中遇到一些問題,總結(jié)記錄下來。這里不對(duì)minio做過多介紹,具體資料自行查找.

      1、官網(wǎng)地址 https://min.io/

      2、github地址 https://github.com/minio/minio

      3、windows 服務(wù)端下載地址 https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

      4、安裝啟動(dòng)

      啟動(dòng)一個(gè)cmd窗口,進(jìn)入minio.exe所在文件夾,輸入如下命令    注:miniodata是需自己創(chuàng)建圖片上傳之后的存儲(chǔ)目錄

      .\minio.exe server H:\DevelopTools\miniodata
      

      運(yùn)行成功之后,會(huì)看到下面的界面

       使用命令行界面給出的地址都可以登錄,賬號(hào)密碼都在地址下面。登錄后如下圖所示。

      在后臺(tái)管理界面上你可以創(chuàng)建你的Bucket(桶),可以理解為一個(gè)文件夾用來存放圖片。桶創(chuàng)建成功之后就可以上傳圖片了

      springboot整合minio實(shí)現(xiàn)文件預(yù)覽上傳和下載

       第一步:引入依賴

       <!--存儲(chǔ)文件依賴-->
       <dependency>
          <groupId>io.minio</groupId>
          <artifactId>minio</artifactId>
          <version>7.1.0</version>
      </dependency>

      第二步:配置參數(shù)類

      /**
       * minio相關(guān)配置 也可以配置在yml文件
       */
      @Component
      public class ParamConfig {
      
          public static String endpoint = "http://127.0.0.1:9000";
          public static String accessKey = "minioadmin";
          public static String secretKey = "minioadmin";
          public static String bucketName = "uavtest";
      
      }

      第三步:添加MinIoUtil

      import cn.hutool.core.date.DateUtil;
      import io.minio.MinioClient;
      import io.minio.PutObjectOptions;
      import io.minio.messages.Bucket;
      import lombok.SneakyThrows;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.stereotype.Component;
      import org.springframework.web.multipart.MultipartFile;
      
      import javax.annotation.PostConstruct;
      import java.io.InputStream;
      import java.util.Date;
      import java.util.List;
      
      /**
       * Minio工具類
       */
      @Slf4j
      @Component
      public class MinIoUtil {
      
          public static MinioClient minioClient;
      
          public static ParamConfig paramConfig;
      
          /**
           * 初始化minio配置
           */
          @PostConstruct
          public void init() {
              try {
                  log.info("Minio Initialize........................");
                  minioClient = MinioClient.builder().endpoint(paramConfig.endpoint).credentials(paramConfig.accessKey, paramConfig.secretKey).build();
                  createBucket(paramConfig.bucketName);
                  log.info("Minio Initialize........................successful");
              } catch (Exception e) {
                  e.printStackTrace();
                  log.error("初始化minio配置異常: 【{}】", e.fillInStackTrace());
              }
          }
      
          /**
           * 判斷bucket是否存在
           */
          @SneakyThrows(Exception.class)
          public static boolean bucketExists(String bucketName) {
              return minioClient.bucketExists(bucketName);
          }
      
          /**
           * 創(chuàng)建bucket
           */
          @SneakyThrows(Exception.class)
          public static void createBucket(String bucketName) {
              boolean isExist = minioClient.bucketExists(bucketName);
              if (!isExist) {
                  minioClient.makeBucket(bucketName);
              }
          }
      
          /**
           * 獲取全部bucket
           */
          @SneakyThrows(Exception.class)
          public static List<Bucket> getAllBuckets() {
              return minioClient.listBuckets();
          }
      
          /**
           * 文件上傳
           *
           * @param bucketName: 桶名
           * @param fileName:   文件名
           * @param filePath:   文件路徑
           */
          @SneakyThrows(Exception.class)
          public static void upload(String bucketName, String fileName, String filePath) {
              minioClient.putObject(bucketName, fileName, filePath, null);
          }
      
          /**
           * 上傳文件
           * 返回可以直接預(yù)覽文件的URL
           */
          public static String uploadFile(MultipartFile file) {
              try {
                  //如果存儲(chǔ)桶不存在則創(chuàng)建
                  if (!bucketExists(ParamConfig.bucketName)) {
                      createBucket(ParamConfig.bucketName);
                  }
                  PutObjectOptions putObjectOptions = new PutObjectOptions(file.getInputStream().available(), -1);
                  putObjectOptions.setContentType(file.getContentType());
                  String originalFilename = file.getOriginalFilename();
                  //得到文件流
                  InputStream inputStream = file.getInputStream();
                  //保證文件不重名(并且沒有特殊字符)
                  String fileName = ParamConfig.bucketName + DateUtil.format(new Date(), "_yyyyMMddHHmmss") + originalFilename;
                  minioClient.putObject(ParamConfig.bucketName, fileName, inputStream, putObjectOptions);
                  return getPreviewFileUrl(ParamConfig.bucketName, fileName);
              } catch (Exception e) {
                  e.printStackTrace();
                  return "";
              }
          }
      
          /**
           * 文件上傳
           * 返回下載文件url地址 和下面upload方法僅傳參不同
           * bucketName 也可以直接從ParamConfig對(duì)象中獲取
           */
          @SneakyThrows(Exception.class)
          public static String upload(String bucketName, String fileName, InputStream stream) {
              minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
              return getPreviewFileUrl(bucketName, fileName);
          }
      
          /**
           * 文件上傳
           * 返回下載文件url地址  和上面upload方法僅傳參不同
           */
          @SneakyThrows(Exception.class)
          public static String upload(String bucketName, MultipartFile file) {
              final InputStream is = file.getInputStream();
              final String fileName = file.getOriginalFilename();
              minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
              is.close();
              return getPreviewFileUrl(bucketName, fileName);
          }
      
          /**
           * 刪除文件
           *
           * @param bucketName: 桶名
           * @param fileName:   文件名
           */
          @SneakyThrows(Exception.class)
          public static void deleteFile(String bucketName, String fileName) {
              minioClient.removeObject(bucketName, fileName);
          }
      
          /**
           * 下載文件
           */
      //    @SneakyThrows(Exception.class)
      //    public static void download(String bucketName, String fileName, HttpServletResponse response) {
      //        // 獲取對(duì)象的元數(shù)據(jù)
      //        final ObjectStat stat = minioClient.statObject(bucketName, fileName);
      //        response.setContentType(stat.contentType());
      //        response.setCharacterEncoding("UTF-8");
      //        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
      //        InputStream is = minioClient.getObject(bucketName, fileName);
      //        IOUtils.copy(is, response.getOutputStream());
      //        is.close();
      //    }
      
          /**
           * 獲取minio文件的下載或者預(yù)覽地址
           * 取決于調(diào)用本方法的方法中的PutObjectOptions對(duì)象有沒有設(shè)置contentType
           *
           * @param bucketName: 桶名
           * @param fileName:   文件名
           */
          @SneakyThrows(Exception.class)
          public static String getPreviewFileUrl(String bucketName, String fileName) {
              return minioClient.presignedGetObject(bucketName, fileName);
          }
      
      }

      第四步:接口中引用

       @ResponseBody
          @PostMapping("/tFlightFileUpload")
          @ApiOperation(value = "文件上傳管理-添加minio")
          public Response add(@RequestParam("file") MultipartFile file) throws IOException {
              String url = MinIoUtil.uploadFile(file);
              return Response.success(url);
          }

      注:仔細(xì)看工具類中的方法上的注釋 可以返回預(yù)覽文件和下載文件的URL

       

      posted @ 2022-03-03 18:48  江南大才子  閱讀(19216)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩理伦片一区二区三区| 亚洲a∨国产av综合av| 高清无码18| 亚洲 制服 丝袜 无码| 亚洲av综合色一区二区| 麻豆果冻传媒2021精品传媒一区| 国产精品无码一区二区在线| 免费无遮挡无码视频网站| 成人免费无码大片A毛片抽搐色欲| 国产自在自线午夜精品 | 精品国产一区av天美传媒| 秋霞人妻无码中文字幕| 素人视频亚洲十一十二区| 国产人妻丰满熟妇嗷嗷叫| 特黄大片又粗又大又暴| 她也色tayese在线视频| 亚洲人精品午夜射精日韩| 欧美成人免费一区二区三区视频| 日韩精品久久不卡中文字幕| 最新亚洲人成网站在线影院| 邵阳县| 亚洲成人av在线高清| 欧美高清freexxxx性| 铜川市| 一本一道av无码中文字幕麻豆| 性一交一乱一伦一| 日韩幕无线码一区中文| 久播影院无码中文字幕| 国产成人精品无码一区二区老年人| 日韩在线视频一区二区三| 一区二区三区四区亚洲自拍| 丰满少妇在线观看网站| 亚洲av日韩av一区久久| 在线精品国产中文字幕| 成人性生交大片免费看r老牛网站| 亚洲精品综合网在线8050影院| 国产美女直播亚洲一区色| 欧美日韩国产va在线观看免费 | 午夜国产小视频| 免费视频一区二区三区亚洲激情 | 激情国产一区二区三区四区|