天天看點

docker安裝fastdfs并結合springboot實踐

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
  • docker安裝fastdfs并結合springboot實踐

删除圖檔fastdfs

docker安裝fastdfs并結合springboot實踐

繼續閱讀