前置条件是seaweedfs服务已成功启动,具体部署可参考我上篇文章SeaweedFS部署及使用指南
- 首先导入pom依赖
<dependency>
<groupId>net.anumbrella.seaweedfs</groupId>
<artifactId>seaweedfs-java-client</artifactId>
<version>0.0.2.RELEASE</version>
</dependency>
- 编写SeaweedFS配置类SeaweedFSConfig
@Configuration
public class SeaweedFSConfig {
@Value("${seaweedfs.host}")
private String host;
@Value("${seaweedfs.port}")
private int port;
@Bean
public FileTemplate fileTemplate() {
FileSource fileSource = new FileSource();
// SeaweedFS master服务ip地址
fileSource.setHost(host);
// SeaweedFS master服务端口
fileSource.setPort(port);
try {
// 启动服务
fileSource.startup();
} catch (IOException e) {
e.printStackTrace();
}
return new FileTemplate(fileSource.getConnection());
}
}
我的application.properties配置文件如下:
seaweedfs.host=192.168.1.55 #多个ip地址用逗号隔开
seaweedfs.port=9333
- 上传文件的方法如下,用的是Spring的JUnit测试:
@Autowired
private FileTemplate template;
@Test
public void testSeaweedFS() throws IOException {
// 上传可以指定文件名
FileHandleStatus handleStatus = template.saveFileByStream("new_name.pdf", new FileInputStream(new File("C:\\Users\\xuyan\\Desktop\\test.pdf")));
// 获取文件ID,可通过这个ID获取到文件
String fileId = handleStatus.getFileId();
StreamResponse fileStream = template.getFileStream(fileId);
InputStream inputStream = fileStream.getInputStream();
// 获取流之后流拷贝输出到本地
IOUtils.copy(inputStream,new FileOutputStream(new File("D:/new_name.pdf")));
}
网友评论