前と分離プロジェクトの終了後に、どのようにエレガントなファイルストレージのために!

SpringBoot実際の電力供給のアイテムモール(25K +スター)住所:github.com/macrozheng / ...

概要

前節で、MinIOは、オブジェクトストレージサービスから構築された使用、我々はSpringBootとVueのは、ファイルストレージを実現するために結合する方法をMinIOの下で話しているこの時間について話しました。

学校の準備

この記事では、いくつかのMinIO基本を学ぶ必要があり、小さなパートナーは、以下を参照することができます理解していない:Githubのは10 Fenzhong自己構築されたオブジェクトストレージサービス、19K +スターを主演!

連動SpringBootで使用

次は完全な画像のアップロードや削除操作を実現するためにSpringBootを結合します。

  • アップロードフロー図:

  • pom.xmlに関連する依存MinIOを追加します。
<!--MinIO JAVA SDK-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>
复制代码
  • SpringBootでファイルのアップロード機能を開き、あなたは以下の構成application.ymlを追加する必要があります。
spring:
  servlet:
    multipart:
      enabled: true #开启文件上传
      max-file-size: 10MB #限制文件上传大小为10M
复制代码
  • 追加MinioControllerコントローラは、操作の実装ファイルをアップロードし、削除するために使用されます。
/**
 * Created by macro on 2019/12/25.
 */
@Api(tags = "MinioController", description = "MinIO对象存储管理")
@Controller
@RequestMapping("/minio")
public class MinioController {

    private static final Logger LOGGER = LoggerFactory.getLogger(MinioController.class);
    @Value("${minio.endpoint}")
    private String ENDPOINT;
    @Value("${minio.bucketName}")
    private String BUCKET_NAME;
    @Value("${minio.accessKey}")
    private String ACCESS_KEY;
    @Value("${minio.secretKey}")
    private String SECRET_KEY;

    @ApiOperation("文件上传")
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult upload(@RequestParam("file") MultipartFile file) {
        try {
            //创建一个MinIO的Java客户端
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
            boolean isExist = minioClient.bucketExists(BUCKET_NAME);
            if (isExist) {
                LOGGER.info("存储桶已经存在!");
            } else {
                //创建存储桶并设置只读权限
                minioClient.makeBucket(BUCKET_NAME);
                minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY);
            }
            String filename = file.getOriginalFilename();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // 设置存储对象名称
            String objectName = sdf.format(new Date()) + "/" + filename;
            // 使用putObject上传一个文件到存储桶中
            minioClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), file.getContentType());
            LOGGER.info("文件上传成功!");
            MinioUploadDto minioUploadDto = new MinioUploadDto();
            minioUploadDto.setName(filename);
            minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
            return CommonResult.success(minioUploadDto);
        } catch (Exception e) {
            LOGGER.info("上传发生错误: {}!", e.getMessage());
        }
        return CommonResult.failed();
    }

    @ApiOperation("文件删除")
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult delete(@RequestParam("objectName") String objectName) {
        try {
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
            minioClient.removeObject(BUCKET_NAME, objectName);
            return CommonResult.success(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return CommonResult.failed();
    }
}
复制代码
  • 設定しMinIOクライアントapplication.ymlで:
# MinIO对象存储相关配置
minio:
  endpoint: http://192.168.6.132:9090 #MinIO服务所在地址
  bucketName: mall #存储桶名称
  accessKey: minioadmin #访问的key
  secretKey: minioadmin #访问的秘钥
复制代码
  • :アップロードファイルのアップロード、アップロードインターフェースのアドレスにアクセスするためにポストマン・インターフェースを使用して、自分のアプリケーションを起動しSpringBoot にhttp:// localhost:8080 / Minio /アップロードを

  • アップロードした後、私たちはあなたにもURLから返された画像にアクセスすることができ、アップロード後の写真を見ることができMinIO管理インターフェイスを開きます。

  • 私たちは、画像を削除するには、インターフェイスを削除するために呼び出すことができ、ことに留意すべきobjectName値は、バケットの相対パスの写真にある、ファイル・インターフェース・アドレスを削除:HTTP:// localhostを:8080 / Minio /削除]を

Vueのと組み合わせて使用​​します

上記の操作の後、私たちのSpringBootアプリケーションは、ファイルのアップロードや削除操作で完了することができ、その後、我々は、にしてMinIOにフロントエンドのアップロード画像を実現するためのVueを組み合わせたmall-admin-web例として、コード。

  • 私たちのSpringBootアプリケーションは、のは、グローバルなクロスドメインリクエストの設定を追加してみましょう、そうでない場合はVueのフロントエンドのインターフェース呼び出しをすることはできませんクロスドメインリクエストをサポートする必要があります。
/**
 * 全局跨域配置
 * Created by macro on 2019/7/27.
 */
@Configuration
public class GlobalCorsConfig {

    /**
     * 允许跨域调用的过滤器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许所有域名进行跨域调用
        config.addAllowedOrigin("*");
        //允许跨越发送cookie
        config.setAllowCredentials(true);
        //放行全部原始头信息
        config.addAllowedHeader("*");
        //允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
复制代码
  • mall-admin-web主に中のファイルアップロード操作singleUpload.vuemultiUpload.vue、次の当社におけるsingleUpload.vue変形例。

  • 私たちは、最初のデータ・オブジェクトVueのインスタンスに3つの属性を追加し、オリジナルのOSSのアップロードとなりましMinIOのアップロード操作は互換性がある必要があります。

  • その後に応じてuseOssのプロパティel-uploadアップロードコンポーネントのパラメータを提出したアドレスと送信します:

  • el-upload動作しMinIO OSS操作する戦略をアップロードされませを使用してアップロードするアップロードフック関数の前に次のコードを追加します。

  • 最後に、el-upload次のコードファイルのアップロードが正常に機能をフック追加し、ファイルのURLが返された結果からMinIOのアップロード操作を使用して取得しました。

  • 実行してmall-admin-web正常にアップロードされていることが見つかった、ファイルアップロード中の商品の分類の下でテストに追加機能を使用して、プロジェクトを、絵は、通常のエコーすることができます:

プロジェクトアドレスの後端

github.com/macrozheng/...

フロントエンドプロジェクトアドレス

github.com/macrozheng/...

いいえ公共ありません

モールは、プロジェクトで連載フルチュートリアル国民の関心番号取得する最初の時間を。

いいえ公共絵ません

おすすめ

転載: juejin.im/post/5e0ca2266fb9a0484a45969c