Multiple-uploader是一个Java上传工具,他最大的特点是可以通过简单的方式,将文件上传到多个CDN存储中(通过适配,也可以上传到其他存储) ,通过添加多个依赖,将文件上传到不同的位置,用于实现灾备和负载,同时当需要更改存储时,也可以很方便的进行实现的替换。 需要注意的是,目前只支持最简单的上传操作。不支持其他操作
如果需要获取快照版本,需要先添加仓库地址 已发布到**仓库
<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,那么需要将这些依赖添加进你的依赖管理中去,如果未添加,则编译不通过
获得依赖之后,首先需要在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()抽象方法,需要注意的是,这个事件在一次上传中,一定会实现一次,且只有一次