前置條件是seaweedfs服務(wù)已成功啟動,具體部署可參考我上篇文章SeaweedFS部署及使用指南
- 首先導(dǎo)入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服務(wù)ip地址
fileSource.setHost(host);
// SeaweedFS master服務(wù)端口
fileSource.setPort(port);
try {
// 啟動服務(wù)
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")));
}