SpringBoot 통합 FastdFS 는 파일 업로드 에 의존 하 는 예제 입 니 다.

머리말
FastDFS 파일 시스템 을 설치 한 후 사용 합 니 다.
FastdFS 의 설 치 는 이 편 을 참고 하 십시오.Docker 에 FastDFS 파일 시스템 구축(다 중 그림)
본문 환경:IDEA+JDK 1.8+Maven
본 논문 의 프로젝트 코드:fastdfs_jb51.rar
1.의존 도입
간단하게 말하자면 이 의존 부분 은 현재 대부분 다음 과 같은 의존 을 사용 하고 있다.

<!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java -->
<dependency>
    <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>
반복 적 으로 바퀴 를 만 들 지 않 고 사용 하기에 편리 하도록 GitHub 에 가서 통합 적 인 의존 도 를 찾 을 수 있 습 니 다.
https://github.com/tobato/FastDFS_Client

<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.27.2</version>
</dependency>
2.Fdfs 설정 을 프로젝트 에 도입
설정 클래스 만 만 들 면 됩 니 다:

@Configuration
@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class ComponetImport {
    //       
}
참고 캡 처:

3.application.yml 에 Fdfs 관련 매개 변 수 를 설정 합 니 다.
자신의 상황 에 따라 해당 ip 주소 와 포트 번 호 를 수정 합 니 다.

server:
  port: 8080

ip: 10.211.55.4 #     FastDFS     

fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image:             #       
    width: 150
    height: 150
  tracker-list:            #TrackerList  ,    
    - 10.211.55.4:22122
  web-server-url: http://${ip}:8888/
4.client 패키지 도구 류
FastDFSClient.java 포장 도구 클래스 를 만 들 고 나중에 사용 하기 편리 합 니 다.

import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;

@Component
public class FastDFSClient {

    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private FdfsWebServer fdfsWebServer;

    /**
     *     
     * @param file     
     * @return       
     * @throws IOException
     */
    public String uploadFile(MultipartFile file) throws IOException {
        StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
        return getResAccessUrl(storePath);
    }

    /**
     *     
     * @param file     
     * @return       
     * @throws IOException
     */
    public String uploadFile(File file) throws IOException {
        FileInputStream inputStream = new FileInputStream (file);
        StorePath storePath = storageClient.uploadFile(inputStream,file.length(), FilenameUtils.getExtension(file.getName()),null);
        return getResAccessUrl(storePath);
    }

    /**
     *               
     * @param content     
     * @param fileExtension
     * @return
     */
    public String uploadFile(String content, String fileExtension) {
        byte[] buff = content.getBytes(Charset.forName("UTF-8"));
        ByteArrayInputStream stream = new ByteArrayInputStream(buff);
        StorePath storePath = storageClient.uploadFile(stream,buff.length, fileExtension,null);
        return getResAccessUrl(storePath);
    }

    /**
     *       URL  
      */
    private String getResAccessUrl(StorePath storePath) {
        String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
        return fileUrl;
    }

    /**
     *     
     * @param fileUrl       
     * @return
     */
    public void deleteFile(String fileUrl) {
        if (StringUtils.isEmpty(fileUrl)) {
            return;
        }
        try {
            StorePath storePath = StorePath.parseFromUrl(fileUrl);
            storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
        } catch (FdfsUnsupportStorePathException e) {
            System.out.println(e.getMessage());
            /** TODO     ,     ,logger,            **/
        }
    }
    /**
     *     
     *
     * @param fileUrl   URL
     * @return     
     * @throws IOException
     */
    public byte[] downloadFile(String fileUrl) throws IOException {
        String group = fileUrl.substring(0, fileUrl.indexOf("/"));
        String path = fileUrl.substring(fileUrl.indexOf("/") + 1);
        DownloadByteArray downloadByteArray = new DownloadByteArray();
        byte[] bytes = storageClient.downloadFile(group, path, downloadByteArray);
        return bytes;
    }

}
5.Conttoler 테스트 클래스 만 들 기
5.1 파일 업로드 테스트

@RestController
@RequestMapping("/file")
public class FileUploadController {

    @Autowired
    private FastDFSClient fastDFSClient;

    /**
     *   
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("/upload")
    public String uploadFile(MultipartFile file) throws IOException {
        return fastDFSClient.uploadFile(file);
    }

}
실행 효과 캡 처:

5.2 파일 다운로드 테스트

@RestController
@RequestMapping("/file")
public class FileUploadController {

    @Autowired
    private FastDFSClient fastDFSClient;

    /**
     *   
     * @param fileUrl
     * @param response
     * @throws IOException
     */
    @RequestMapping("/download")
    public void downloadFile(String fileUrl, HttpServletResponse response) throws IOException {
        byte[] bytes = fastDFSClient.downloadFile(fileUrl);
        /** TODO         fastdfs,         。             。             **/
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));
        response.setCharacterEncoding("UTF-8");
        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            outputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
테스트 다운로드 경로:
http://127.0.0.1:8080/file/download?fileUrl=group1/M00/00/00/CtM3BF84r4SAEPDgAABoGL78QcY682.jpg
연결 하 는 매개 변 수 는:group1/M00/00/00/CtM3BF84r4SAEPDgAABoGL78QcY682.jpg경 로 를 수정 하려 면 downloadFile()방법의 구분 방식 을 동시에 수정 해 야 합 니 다.

SpringBoot 통합 FastdFS 의존 구현 파일 업로드 에 관 한 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot FastdFS 파일 업로드 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기