1.首先安装linux系统
service fdfs_trackerd start // 开启地址管理
service fdfs_storaged start//开启具体的库
netstat -unltp|grep fdfs //查看状态
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf 监视器
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //提供web服务,相同于开启跨域,解决跨域
fdfs_test /etc/fdfs/client.conf upload /root/1.jpg //上传文件测试命令
service iptables stop //关闭防火墙
2.安装jar包为maven包放在仓库的命令,在当前包中cmd
mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs -Dversion=1.2 -Dpackaging=jar -Dfile=fastdfs_client_v1.20.jar
3.上传至fastdfs工具类(直接拷贝使用)
public class FastDfsApiUtil {
public static String CONF_FILENAME = FastDfsApiUtil.class.getResource("/fdfs_client.conf").getFile();
/**
* 上传文件
* @param file
* @param extName
* @return
*/
public static String upload(byte[] file,String extName) {
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
NameValuePair nvp [] = new NameValuePair[]{
new NameValuePair("age", "18"),
new NameValuePair("sex", "male")
};
String fileIds[] = storageClient.upload_file(file,extName,nvp);
System.out.println(fileIds.length);
System.out.println("组名:" + fileIds[0]);
System.out.println("路径: " + fileIds[1]);
return "/"+fileIds[0]+"/"+fileIds[1];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 下载文件
* @param groupName
* @param fileName
* @return
*/
public static byte[] download(String groupName,String fileName) {
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
byte[] b = storageClient.download_file(groupName, fileName);
return b;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 删除文件
* @param groupName
* @param fileName
*/
public static void delete(String groupName,String fileName){
try {
ClientGlobal.init(CONF_FILENAME);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
int i = storageClient.delete_file(groupName,fileName);
System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("删除异常,"+e.getMessage());
}
}
}
4.服务端的controller
@RestController
public class LogoController {
@PostMapping("/fastdfs")
public AjaxResult upload(MultipartFile file) throws Exception{
String originalFilename = file.getOriginalFilename();//获得文件的绝对名字
int i = originalFilename.lastIndexOf(".");//获得.所在的索引
String pointLastName = originalFilename.substring(i - 1);//获得后缀名
byte[] fileByteList = file.getBytes();//获得文件的byte数组,因为传输文件需要
String upload = FastDfsApiUtil.upload(fileByteList, pointLastName);//返回路径
return AjaxResult.myAjaxResult().setRestObj(upload);
}
//"/group1/M00/00/01/rBAEn11FTNqAZelHAADTR3fzRWE9.6.jpg",
//"group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf")
@DeleteMapping("/fastdfs")
public AjaxResult delete(String allFileName){
String sname = allFileName.substring(1);//将第一个/去掉
int i = sname.indexOf("/");//获得第二个/的索引
String groupName = sname.substring(0,i);//获得groupId
String fileName = sname.substring(i+1);//获得file的名字
FastDfsApiUtil.delete(groupName,fileName);
return AjaxResult.myAjaxResult();
}
}
5.前端通过:action调用zuul的url或者服务器的url,然后通过:onSuccess返回的response.restObj返回属性值,然后封装一起保存到后端