java操作fastdfs包括文件上传、下载、删除

简介: java操作fastdfs包括文件上传、下载、删除

 pom.xml

<!-- FastDFS -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.5</version>
        </dependency>

image.gif

application.yml

# 分布式文件系统FDFS配置
fdfs:
  #读取时间
  so-timeout: 30000
  #连接超时时间
  connect-timeout: 60000
  # TrackerList路径,支持多个121.41.118.73
  tracker-list:
    - ip:22122
  # 自定义配置,文件访问路径(这个ip为nginx的ip)http://121.41.118.73:8888
  fileUrl: http://ip:8888

image.gif

上传

@Autowired
    private FastFileStorageClient fastFileStorageClient;
    @Value("${fdfs.fileUrl}")
    private String fileUrl; // Nginx访问FastDFS中文件的路径
    /**
     * fastdfs上传文件
     *
     * @param file 文件
     * @return
     * @throws IOException
     */
    @PostMapping("/fastdfs/upload")
    public BaseResult<String> fastdfsUpload(MultipartFile file) throws IOException {
        // MultipartFile对象不能再服务间传递,必须转为byte数组
        byte[] fileBytes = file.getBytes();
        String fileName = file.getOriginalFilename();
        String imageUrl = "";
        if (fileBytes.length != 0) {
            try {
                // 1.将文件字节数组转为输入流
                InputStream inputStream = new ByteArrayInputStream(fileBytes);
                // 2.获取文件的后缀名
                String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                // 3.上传文件
                StorePath storePath = fastFileStorageClient.uploadFile(inputStream, inputStream.available(), fileSuffix, null);
                // 4.返回图片路径
                imageUrl = fileUrl + "/" + storePath.getFullPath();
            } catch (IOException ioException) {
                return new BaseResult<>(CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getCode(), CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getMessage(), null);
            }
        } else {
            return new BaseResult<>(CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getCode(), CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getMessage(), null);
        }
        return BaseResult.ok(imageUrl);
    }

image.gif

删除

/**
     * fastdfs删除文件
     *
     * @param filePath 文件路径
     * @return
     */
    @PostMapping("/fastdfs/deleteUrl")
    public BaseResult fastdfsDelete(String filePath) {
        fastFileStorageClient.deleteFile(filePath);
        return BaseResult.ok();
    }

image.gif

下载

/**
     * fastdfs下载文件
     *
     * @param filePath 文件路径
     * @return
     */
    @GetMapping("/fastdfs/download")
    public void fastdfsDownLoad(String filePath) throws IOException {
        //http://ip:8888/group1/M00/00/00/rBoX5mR0ulSAIukOAASzmDL13HM352.jpg
        byte[] bytes = null;
        try {
            //返回"/"第三次出现的位置
            int index1 = StringUtils.ordinalIndexOf(filePath,"/",3);
            int index2 = StringUtils.ordinalIndexOf(filePath,"/",4);
            String group = filePath.substring(index1+1,index2);
            String filepath = filePath.substring(filePath.lastIndexOf(group + "/")+7);
            DownloadByteArray callback = new DownloadByteArray();
            bytes = fastFileStorageClient.downloadFile(group, filepath,callback);
            //文件输出流
            FileOutputStream fileOutputStream = new FileOutputStream("D:\\A多媒体\\图库\\fastdfs");
            fileOutputStream.write(bytes);
            fileOutputStream.flush();
            fileOutputStream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

image.gif

全部代码

import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import jkw.result.BaseResult;
import jkw.result.CodeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@RestController
@RequestMapping("/file")
public class FileController {
    @Autowired
    private FastFileStorageClient fastFileStorageClient;
    @Value("${fdfs.fileUrl}")
    private String fileUrl; // Nginx访问FastDFS中文件的路径
    /**
     * fastdfs上传文件
     *
     * @param file 文件
     * @return
     * @throws IOException
     */
    @PostMapping("/fastdfs/upload")
    public BaseResult<String> fastdfsUpload(MultipartFile file) throws IOException {
        // MultipartFile对象不能再服务间传递,必须转为byte数组
        byte[] fileBytes = file.getBytes();
        String fileName = file.getOriginalFilename();
        String imageUrl = "";
        if (fileBytes.length != 0) {
            try {
                // 1.将文件字节数组转为输入流
                InputStream inputStream = new ByteArrayInputStream(fileBytes);
                // 2.获取文件的后缀名
                String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                // 3.上传文件
                StorePath storePath = fastFileStorageClient.uploadFile(inputStream, inputStream.available(), fileSuffix, null);
                // 4.返回图片路径
                imageUrl = fileUrl + "/" + storePath.getFullPath();
            } catch (IOException ioException) {
                return new BaseResult<>(CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getCode(), CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getMessage(), null);
            }
        } else {
            return new BaseResult<>(CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getCode(), CodeEnum.FILE_FASTDFS_UPLOAD_ERROR.getMessage(), null);
        }
        return BaseResult.ok(imageUrl);
    }
    /**
     * fastdfs删除文件
     *
     * @param filePath 文件路径
     * @return
     */
    @PostMapping("/fastdfs/deleteUrl")
    public BaseResult fastdfsDelete(String filePath) {
        fastFileStorageClient.deleteFile(filePath);
        return BaseResult.ok();
    }
    /**
     * fastdfs下载文件
     *
     * @param filePath 文件路径
     * @return
     */
    @GetMapping("/fastdfs/download")
    public void fastdfsDownLoad(String filePath) throws IOException {
        //http://ip:8888/group1/M00/00/00/rBoX5mR0ulSAIukOAASzmDL13HM352.jpg
        byte[] bytes = null;
        try {
            //返回"/"第三次出现的位置
            int index1 = StringUtils.ordinalIndexOf(filePath,"/",3);
            int index2 = StringUtils.ordinalIndexOf(filePath,"/",4);
            String group = filePath.substring(index1+1,index2);
            String filepath = filePath.substring(filePath.lastIndexOf(group + "/")+7);
            DownloadByteArray callback = new DownloadByteArray();
            bytes = fastFileStorageClient.downloadFile(group, filepath,callback);
            //文件输出流
            FileOutputStream fileOutputStream = new FileOutputStream("D:\\A多媒体\\图库\\fastdfs");
            fileOutputStream.write(bytes);
            fileOutputStream.flush();
            fileOutputStream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

image.gif


相关文章
|
10天前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
17天前
|
存储 Java
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
39 0
|
7天前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
7天前
|
缓存 前端开发 Java
在Java项目中实现高性能的文件上传下载
在Java项目中实现高性能的文件上传下载
|
10天前
|
前端开发 安全 Java
如何在Java中实现高效率的文件上传和下载
如何在Java中实现高效率的文件上传和下载
|
12天前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
12天前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
5天前
|
并行计算 Java 数据挖掘
Java面试题:解释Java中的Stream API及其操作
Java面试题:解释Java中的Stream API及其操作
10 0
|
7天前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
7天前
|
缓存 安全 Java
使用Java实现高性能的文件上传下载服务
使用Java实现高性能的文件上传下载服务