1.打开虚拟机
运行docker
systemctl start docker
2.在docker上安装fastdfs
docker pull morunchang/fastdfs
下载后 启动tracker
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
启动storage
docker run -d --name storage --net=host -e TRACKER_IP=虚拟机ip:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
重启storage
docker restart storage
创建springboot项目
导入依赖
pom.xml 参考
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.baidu</groupId>
<artifactId>upload-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>upload-service</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
配置文件application.yml
server:
port: 9004
logging:
#file: demo.log
pattern:
console: "%d - %msg%n"
level:
org.springframework.web: debug
com.baidu.uploadservice: debug
spring:
servlet:
multipart:
enabled: true
max-file-size: 10MB #单个文件上传大小
max-request-size: 20MB #总文件上传大小
fdfs:
# 链接超时
connect-timeout: 60
# 读取时间
so-timeout: 60
# 生成缩略图参数
thumb-image:
width: 150
height: 150
tracker-list: 192.168.119.128:22122 # 自己虚拟机的IP地址
编写工具类
@Component
public class FileDfsUtil {
@Autowired
private FastFileStorageClient storageClient;
/**
* 上传文件
* @param multipartFile
* @return
* @throws Exception
*/
public String upload(MultipartFile multipartFile) throws Exception {
//获取文件后缀名
String extName = FilenameUtils.getExtension(multipartFile.getOriginalFilename());
System.out.println("======xxxx========="+extName); //jpeg
//组名 和路径 StorePath [group=group1, path=M00/00/00/wKh3gGDJZL-ARhexAAaGIb2yhI462.jpeg]
StorePath storePath = storageClient.uploadImageAndCrtThumbImage(multipartFile.getInputStream(), multipartFile.getSize(), extName, null);
System.out.println("****************====="+storePath);
return storePath.getFullPath();
}
/**
* 删除文件
* @param fileUrl
*/
public void deleteFile(String fileUrl) {
StorePath storePath = StorePath.parseFromUrl(fileUrl);
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
}
}
编写controller
@RestController
public class FileController {
@Autowired
private FileDfsUtil fileDfsUtil;
/**
* 上传文件
* @param file
* @return
*/
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST, headers="content-type=multipart/form-data")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
String result = "";
try {
//获取完整路径 group1/M00/00/00/wKh3gGDJZL-ARhexAAaGIb2yhI462.jpeg
String path = fileDfsUtil.upload(file);
System.out.println("path:"+path);
if (StringUtils.isEmpty(path)) {
result = "上传失败";
} else {
result = path;
}
} catch (Exception e) {
e.printStackTrace();
result = "服务器异常";
}
return ResponseEntity.ok(result);
}
/**
*
* @param filePathName
* @return
*/
@RequestMapping(value = "/deleteByPath", method = RequestMethod.GET)
public ResponseEntity<String> deleteByPath(String filePathName) {
fileDfsUtil.deleteFile(filePathName);
return ResponseEntity.ok("success delete");
}
}
访问路径
- 上传图片到fastdfs
删除图片fastdfs