multiple-uploader-api

批量上传器接口(空实现,只提供上传接口,使用批量上传必须依赖此构建)

License

License

GroupId

GroupId

io.github.chenwuwen
ArtifactId

ArtifactId

multiple-uploader-api
Last Version

Last Version

1.0.0
Release Date

Release Date

Type

Type

jar
Description

Description

multiple-uploader-api
批量上传器接口(空实现,只提供上传接口,使用批量上传必须依赖此构建)
Project URL

Project URL

https://chenwuwen.github.io/
Source Code Management

Source Code Management

https://github.com/chenwuwen/multiple-uploader

Download multiple-uploader-api

How to add to project

<!-- https://jarcasting.com/artifacts/io.github.chenwuwen/multiple-uploader-api/ -->
<dependency>
    <groupId>io.github.chenwuwen</groupId>
    <artifactId>multiple-uploader-api</artifactId>
    <version>1.0.0</version>
</dependency>
// https://jarcasting.com/artifacts/io.github.chenwuwen/multiple-uploader-api/
implementation 'io.github.chenwuwen:multiple-uploader-api:1.0.0'
// https://jarcasting.com/artifacts/io.github.chenwuwen/multiple-uploader-api/
implementation ("io.github.chenwuwen:multiple-uploader-api:1.0.0")
'io.github.chenwuwen:multiple-uploader-api:jar:1.0.0'
<dependency org="io.github.chenwuwen" name="multiple-uploader-api" rev="1.0.0">
  <artifact name="multiple-uploader-api" type="jar" />
</dependency>
@Grapes(
@Grab(group='io.github.chenwuwen', module='multiple-uploader-api', version='1.0.0')
)
libraryDependencies += "io.github.chenwuwen" % "multiple-uploader-api" % "1.0.0"
[io.github.chenwuwen/multiple-uploader-api "1.0.0"]

Dependencies

runtime (3)

Group / Artifact Type Version
com.google.guava : guava jar 28.1-jre
com.google.auto.service : auto-service jar 1.0-rc6
org.reflections : reflections jar 0.9.11

Project Modules

There are no modules declared in this project.

Multiple-uploader

1.功能描述

Multiple-uploader是一个Java上传工具,他最大的特点是可以通过简单的方式,将文件上传到多个CDN存储中(通过适配,也可以上传到其他存储) ,通过添加多个依赖,将文件上传到不同的位置,用于实现灾备和负载,同时当需要更改存储时,也可以很方便的进行实现的替换。 需要注意的是,目前只支持最简单的上传操作。不支持其他操作

2.如何获得

如果需要获取快照版本,需要先添加仓库地址 已发布到中央仓库

<repositories>
 
<repository>
    <id>snapshots</id>
    <name>snapshots</name>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>
 
</repositories>

添加完仓库后,就可以添加依赖了。

<dependency>
  <groupId>io.github.chenwuwen</groupId>
  <artifactId>multiple-uploader-api</artifactId>
  <version>${version}</version>
</dependency>

<!--七牛云适配器-->
<dependency>
  <groupId>io.github.chenwuwen</groupId>
  <artifactId>multiple-uploader-qiniu</artifactId>
  <version>${version}</version>
</dependency>

<!--又拍云适配器-->
<dependency>
  <groupId>io.github.chenwuwen</groupId>
  <artifactId>multiple-uploader-upyun</artifactId>
  <version>${version}</version>
</dependency>
  • 注意 :multiple-uploader-api是必须的,其他的是非必须的,可以依赖一个,也可以依赖多个 也可以都不依赖,如果不依赖适配器,则默认上传操作是空操作,如果选择了其中的一个或者多个依赖,则还需要 自行添加真实上传依赖。

例: 选择了multiple-uploader-qiniu依赖,此时打开七牛云开发者中心 可以看到,使用七牛云需要添加哪些SDK,那么需要将这些依赖添加进你的依赖管理中去,如果未添加,则编译不通过

3.如何使用

获得依赖之后,首先需要在classpath 下创建storage.properties文件,这里 这个文件下的配置,是会在初始化Uploader下进行读取的。

配置完成后,即可在类/方法中通过

//初始化也可以放在类的静态成员变量中,例如:private static final Uploader uploader = UploaderFactory.getUploader();
Uploader uploader = UploaderFactory.getUploader();
uploader.push("sourcePath","targetPath");

这样就可以上传了

  • 使用回调 除了正常上传外还可以进行上传结果回调
        Uploader uploader = UploaderFactory.getUploader();
        uploader.push("sourcePath", "targetPath", new PushCallback() {
            @Override
            public void onSuccess(String sourcePath, String targetPath) {
                String targetStorageName = getTargetStorageEnum().toString();
                System.out.println(targetStorageName + "====》成功");
            }

            @Override
            public void onError(String sourcePath, String targetPath, Throwable throwable) {
                String targetStorageName = getTargetStorageEnum().toString();
                System.out.println(targetStorageName + "====》失败");
            }
        });

使用回调需要继承PushCallback抽象类,并实现它的onSuccess/onError 方法,需要注意的是 在该方法中可以调用getTargetStorageEnum()方法,该方法返回当前CDN(或者其他存储)的枚举对象 此时就可以通过switch case来对具体存储做具体实现了,onSuccess/onError 方法可能会执行多次,具体就取决你 要往哪些存储上存储了。

    @Override
    public void onSuccess(String sourcePath, String targetPath) {
        ActualCloud actualCloud = getTargetStorageEnum();
        switch (actualCloud) {
            case QINIU_CLOUD:
                service.print();
                break;
            case UP_CLOUD:
                service.print1();
                break;
            default:
                System.out.println("发生了什么");
        }
    }

注意:上传操作是IO操作,因此当文件较大,会比较耗时,如果需要上传到多个存储,更是雪上加霜,因此可以使用异步上传

Uploader uploader = UploaderFactory.getUploader();
uploader.asyncPush("sourcePath","targetPath");

这样就完成了异步上传操作,同样的,异步上传也可以进行回调操作。 有一点与同步上传不同的是,异步上传还可以监听,上传结束事件。

        Uploader uploader = UploaderFactory.getUploader();
        uploader.asyncPush("sourcePath", "targetPath", new CompleteCallback("sourcePath","targetPath") {
            @Override
            public void handler(String sourcePath, String targetPath) {
                System.out.println("上传任务完成");
            }
        });

实现上传结束监听,需要继承CompleteCallback抽象类,并实现handler()抽象方法,需要注意的是,这个事件在一次上传中,一定会实现一次,且只有一次

Versions

Version
1.0.0