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