The fss(for file storage service) apis make storing the blob file easy and simple , the user can supply the provider impl to match the customize requirement if the default build-in impl is not enough.
Here is the support list:
- Alioss
- Qiniu
- Amazon S3 Protocol
- WebDav Protocol
- Glusterfs
- Gridfs
- Zimg
- Local File
So far the following version is available
category | module name | latest version |
---|---|---|
core | daas-fss-core | 3.0.8 |
physical file | daas-fss-zimg | 3.0.8 |
daas-fss-alioss | 3.0.8 | |
daas-fss-gridfs | 3.0.8 | |
daas-fss-glusterfs | 3.0.8 | |
daas-fss-hwobs | 3.0.8 | |
daas-fss-local | 3.0.8 | |
daas-fss-qiniu | 3.0.8 | |
daas-fss-s3 | 3.0.8 | |
daas-fss-webdev | 3.0.8 | |
database | daas-fss-mysql | 3.0.8 |
daas-fss-mongodb | 3.0.8 |
And 2.0.0 is deprecated.
We will take WebDAV for example.
- Start a file server supporting WebDAV protocol
- Gradle as build tool
- Show the API usage in Spring Application
please make sure docker & docker-compose are ready on your local machine.
We will quick start a WebDAV file server by docker-compose.
Here is the docker-compose.yml
version: '3'
services:
webdav:
container_name: fss-test-webdav
image: bytemark/webdav
ports:
- "80:80"
environment:
AUTH_TYPE: Digest
USERNAME: alice
PASSWORD: secret1234
Start it with
docker-compose up -d
Now 80
port is exported as hosted port
Gradle build.gradle
compile("in.clouthink.daas:daas-fss-core:3.0.8")
compile("in.clouthink.daas:daas-fss-webdav:3.0.8")
Maven pom.xml
<dependency>
<groupId>in.clouthink.daas</groupId>
<artifactId>daas-fss-core</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>in.clouthink.daas</groupId>
<artifactId>daas-fss-webdav</artifactId>
<version>3.0.8</version>
</dependency>
Application
@SpringBootApplication
@Import({WebDavAutoConfiguration.class})
@EnableConfigurationProperties(WebDavApplication.TestWebDavProperties.class)
public class WebDavApplication {
@ConfigurationProperties(prefix = "fss.webdav")
public static class TestWebDavProperties extends DefaultWebDavProperties {
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WebDavApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(new Object[]{WebDavApplication.class}, args);
}
}
Spring application.yml
fss:
webdav:
username: alice
password: secret1234
endpoint: http://127.0.0.1
logging:
level:
in.clouthink: debug
com.github.sardine: debug
Then let's create a test
@RunWith(SpringRunner.class)
@SpringBootTest(classes = WebDavApplication.class)
public class WebDavTest {
@Resource
@Qualifier("webdavStorage")
private FileStorage fileStorage;
private ClassPathResource pdfResource = new ClassPathResource("please_replace_with_your_test_file.pdf");
@Test
public void test() throws IOException {
Assert.assertTrue(pdfResource.exists());
DefaultStoreFileRequest request = new DefaultStoreFileRequest();
request.setOriginalFilename(pdfResource.getFilename());
request.setContentType(MediaType.APPLICATION_PDF.toString());
StoreFileResponse response = fileStorage.store(pdfResource.getInputStream(), request);
Assert.assertEquals("webdav", response.getProviderName());
StoredFileObject storedFileObject = response.getStoredFileObject();
Assert.assertNotNull(storedFileObject);
storedFileObject = fileStorage.findByStoredFilename(storedFileObject.getStoredFilename());
String saveToFilename = MetadataUtils.generateFilename(request);
storedFileObject.writeTo(new FileOutputStream(saveToFilename), 1024 * 4);
storedFileObject = fileStorage.delete(storedFileObject.getStoredFilename());
Assert.assertNull(storedFileObject.getImplementation());
}
}
Default implementation is build inside , here is the sample to quick enable it in Spring.
@EnableConfigurationProperties(WebDavApplication.TestWebDavProperties.class)
public class WebDavApplication {
@ConfigurationProperties(prefix = "fss.webdav")
public static class TestWebDavProperties extends DefaultWebDavProperties {
}
...
}
Definition
in.clouthink.daas.fss.alioss.support.OssProperties
Implementation
in.clouthink.daas.fss.alioss.support.DefaultOssProperties
Sample
fss:
alioss:
keyId: <your alioss key id>
keySecret: <your alioss key secret>
endpoint: oss-cn-shenzhen.aliyuncs.com
defaultBucket: testfss
clientConfiguration:
socketTimeout: 5000
connectionTimeout: 5000
Definition
in.clouthink.daas.fss.fastdfs.support.FastdfsProperties
Implementation
in.clouthink.daas.fss.fastdfs.support.DefaultFastdfsProperties
Sample
fss:
fastdfs:
connectTimeoutInseconds: 30
networkTimeoutInSeconds: 60
charset: UTF-8
httpAntiStealToken: false
httpSecretKey:
httpTrackerHttpPort: 8080
trackerServers:
- tracker:22122
Definition
in.clouthink.daas.fss.glusterfs.support.GlusterfsProperties
Implementation
in.clouthink.daas.fss.glusterfs.support.DefaultGlusterfsProperties
Sample
fss:
glusterfs:
server: glusterfs1
volume: test-volume
Share the Spring Mongodb Data configuration and no more special.
spring:
data:
mongodb:
uri: mongodb://${MONGODB_HOST:localhost}:${MONGODB_PORT:27017}/${MONGODB_DB:daas-fss}
Definition
in.clouthink.daas.fss.qiniu.support.QiniuProperties
Implementation
in.clouthink.daas.fss.qiniu.support.DefaultQiniuProperties
Sample
fss:
qiniu:
accessKey: <your qiniu access key>
secretKey: <your qiniu secret ky>
host: <your qiniu subdomain>.bkt.clouddn.com
defaultBucket: testfss
Definition
in.clouthink.daas.fss.s3.support.S3Properties
Implementation
in.clouthink.daas.fss.s3.support.DefaultS3Properties
Sample
fss:
s3:
accessKey: <your s3 access key>
secretKey: <your s3 secret key>
endpoint: <your s3 endpoint>
region: us-west-2
bucketStyle: path
defaultBucket: test
clientConfiguration:
connectionTimeout: 5000
Definition
in.clouthink.daas.fss.webdav.support.WebdavProperties
Implementation
in.clouthink.daas.fss.webdav.support.DefaultWebdavProperties
Sample
fss:
webdav:
username: alice
password: secret1234
endpoint: http://127.0.0.1
Definition
in.clouthink.daas.fss.zimg.support.ZimgProperties
Implementation
in.clouthink.daas.fss.zimg.support.DefaultZimgProperties
Sample
fss:
zimg:
uploadEndpoint: http://127.0.0.1:4869/upload
downloadEndpoint: http://127.0.0.1:4869
adminEndpoint: http://127.0.0.1:4869/admin
infoEndpoint: http://127.0.0.1:4869/info
Definition
in.clouthink.daas.fss.local.support.LocalFileProperties
Implementation
in.clouthink.daas.fss.local.support.DefaultLocalFileProperties
Sample
fss:
local:
store-path: <your local file store path>
Install all (skip test)
mvn clean install -Dmaven.test.skip=true
Build all
mvn clean package
Build single project
- core
mvn -pl module/core clean package
# or
mvn --projects module/core clean package
- alioss
mvn -pl module/alioss clean package -am
# or
mvn --projects module/alioss clean package --also-make
- fastdfs
mvn -pl module/fastdfs lean package -am
# or
mvn --projects module/fastdfs clean package --also-make
- glusterfs
mvn -pl module/glusterfs lean package -am
# or
mvn --projects module/glusterfs clean package --also-make
- gridfs
mvn -pl module/gridfs lean package -am
# or
mvn --projects module/gridfs clean package --also-make
- qiniu
mvn -pl module/qiniu lean package -am
# or
mvn --projects module/qiniu clean package --also-make
- s3
mvn -pl module/s3 lean package -am
# or
mvn --projects module/s3 clean package --also-make
- webdav
mvn -pl module/webdav lean package -am
# or
mvn --projects module/webdav clean package --also-make
- zimg
mvn -pl module/zimg lean package -am
# or
mvn --projects module/zimg clean package --also-make
- local
mvn -pl module/local lean package -am
# or
mvn --projects module/local clean package --also-make
- mongodb
mvn -pl module/mongodb clean package -am
# or
mvn --projects module/mongodb clean package --also-make
- mysql
mvn -pl module/mysql lean package -am
# or
mvn --projects module/mysql clean package --also-make