public class FastdfsTest {
/**
* fastdfs 不支持对历史文件的覆盖更新,但是在业务中,会存在一个用户只需要保留一份用户图像的场景。所以需要对fastdfs接口进行改造。
* 通过试验,发现可以通过后缀名的方式对指定的文件名进行更新。
* 测试用例中,必须先存在文件group1/M00/05/39/rBAFI1pYeQSAGL-YABlD1nkUo9Q189.jpg、才支持通过后缀名uuid的方式覆盖更新文件。
*/
private final static String REMOTE_PATH = "M00/05/39/rBAFI1pYeQSAGL-YABlD1nkUo9Q189";
private static final String REMOTE_PATH_Image = REMOTE_PATH.concat(".jpg");
private final static String GROUP = "group1";
public static void main(String[] args) throws Exception {
// 需要重新替换的文件名称
String filePath = "62f03daa-ac57-494d-be4b-ef26e0eb6de4.jpg";
String bizType = "user";
File file = new File(filePath);
// 使用MD5加密(经过验证,最多只支持16位后缀)
String uuid = Md5Utils.bit16(bizType + "---" + filePath);
// 获取fdfs客户端
StorageClient client = FastDFSHelper.storageClient();
// 删除文件
client.delete_file(GROUP, REMOTE_PATH.concat(uuid).concat(".jpg"));
// 重新上传新文件
NameValuePair[] meta_list = new NameValuePair[1];
meta_list[0] = new NameValuePair("fileName", file.getName());
meta_list[1] = new NameValuePair("uuid", uuid);
String[] results = client.upload_file(GROUP, REMOTE_PATH_Image, uuid, file.getName(), "jpg", meta_list);
System.out.println(GROUP.concat("/").concat(results[1]));
}
}