---
source: "https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/185949c7-22c3-439c-8518-26b9658dc9f9"
publicId: "185949c7-22c3-439c-8518-26b9658dc9f9"
---

# 将历史文件迁移到FASTDFS存储中操作案例

## 前置条件：

- 系统已经配置好了FASTDFS存储，并且验证可以使用
- 已经理解E10的二开体系，能进行二次开发

## 操作步骤：

### 1、建立历史文件存储和FASTDFS存储的关系映射表，表名可自定义，主要字段信息为

（1）fileId：文件id

（2）old\_file\_path:  历史文件路径

（3）old\_file\_url:  历史物理文件名

（4）new\_file\_path:  FASTDFS 返回的路径值

### 2、将历史数据导入到关系映射表中

映射的sql参考 ：   **select** *[f](http://f.id)*[.](http://f.id)[id](http://f.id) **as** *fileId*,*f*.url **as** *old\_file\_url*,*fs*.file\_path **as** *old\_file\_path* **from** fileobj *f* **inner** **join** file\_storage\_info *fs* **on** *f*.url = *fs*.file\_url

### 3、获取历史文件的文件流上传到 FASTDFS，获取FASTDFS 返回的路径值

此步骤具体开发思路有很多，建议按实际场景选择，下面只讲大概思路

#### 思路 1:

（1）当历史文件还能正常访问，则从关系映射表中获取 fileId，

（2）通过fileId 获取文件流，参考（下载sdk：[https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/cd16e1dc-75be-4848-88ae-092fe1d0f8ee](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/cd16e1dc-75be-4848-88ae-092fe1d0f8ee)）

（3）将文件流上传到FASTDFS，获取返回的FASTDFSID，此步骤需要自己调用 FASTDFS 的API。自行了解学习

（4）拿到 FASTDFSID 后，存储映射表的 new\_file\_path，或者直接修改 file\_storage\_info 表的 file\_url 和 fileobj 表的 url 字段.sql 参考 第5步

（5）或者等文件全部上传完后，且映射表全部处理完后再统一刷数据

update fileobj set url =  FASTDFSID where id = fileId

update file\_storage\_info set file\_url =  FASTDFSID where file\_url = old\_file\_url

#### 思路 2:

（1）历史文件不能通过系统正常访问，但文件在二开服务下，则从关系映射表中获取 old\_file\_path 和 old\_file\_url ，完整的存储路径是 old\_file\_path/old\_file\_url

（2）直接通过路径获取文件流（获取历史文件的步骤，也可以自定义，具体看实际文件在什么地方）

（3）将文件流上传到FASTDFS，获取返回的FASTDFSID，此步骤需要自己调用 FASTDFS 的API。自行了解学习

（4）拿到 FASTDFSID 后，存储映射表的 new\_file\_path，或者直接修改 file\_storage\_info 表的 file\_url 和 fileobj 表的 url 字段.sql 参考 第5步

（5）或者等文件全部上传完后，且映射表全部处理完后再统一刷数据

update fileobj set url =  FASTDFSID where id = fileId

update file\_storage\_info set file\_url =  FASTDFSID where file\_url = old\_file\_url
