我们是一家电商公司,有着大量的图片需要存储,因历史原因当时使用的存储是阿里的TFS,但是我们接手项目后发现老出问题并且没有专业的运维且维护成本很高,所以决定迁移到阿里的OSS (这不是我定的),下面具体讲下这次迁移过程中的一点实践心得。
遗憾的是TFS并没有提供批量导出的工具,所以只有自己想法子决绝了,有两种方案。
一、通过TFS的api
@SpringBootApplication
@ImportResource(locations = "classpath:tfs.xml")
public class App implements CommandLineRunner {
public static final Logger log = LoggerFactory.getLogger(App.class);
@Autowired
private TfsManager tfsManager;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Override
public void run(String... args) throws Exception {
Boolean result = tfsManager.fetchFile("ssf151f12sdf1.jpg", null, new FileOutputStream(new File("e:\\","ssf151f12sdf1.jpg")));
}
二、使用TFS自带的tfstools 工具 使用tfstools batch 命令需要组装数据格式 如:get T16ahTBgKT1RCvBVdK /usr/local/tfs/T16ahTBgKT1RCvBVdK 或者把组装好的格式放到文件当中。
文本文件内容如下(urls.txt)
- get T16ahTBgKT1RCvBVdK /usr/local/tfs/T16ahTBgKT1RCvBVdK
- get T1FRhTBgWT1RCvBVdK /usr/local/tfs/T1FRhTBgWT1RCvBVdK
- get T1JyhTB_VT1RCvBVdK /usr/local/tfs/T1JyhTB_VT1RCvBVdK
- get T1EthTB_ZT1RCvBVdK /usr/local/tfs/T1EthTB_ZT1RCvBVdK
- get T1MthTB_dT1RCvBVdK /usr/local/tfs/T1MthTB_dT1RCvBVdK
- get T1pthTB_ET1RCvBVdK /usr/local/tfs/T1pthTB_ET1RCvBVdK
- get T1NRhTBgVT1RCvBVdK /usr/local/tfs/T1NRhTBgVT1RCvBVdK
使用tfstoos -s localhost:8100 进入到tfs的终端模式#
进入终端后使用 batch /usr/local/urls.txt 然后回车开始执行,也可以不进入终端直接使用tfstools -s localhost:8100 -i "batch /usr/local/urls.txt"来执行,顺便提一下就是使用tfstools get 命令只能获取单个图片。
总结
在选择存储的时候一定要考虑到以后的数据迁移问题,最好支持批量导出数据。