SpringBoot2.0整合Fastdfs 示例

1.简介

       自己在网上看了很多资料,写的花里胡巧的,到处是工具类,其实就几行代码。

       网上有两种连接fastdfs的pom依赖,1:fastdfs-client,2:fastdfs-client-java,第二种看到别人的实例,太花了,不易读,这里使用的是第一种方式

       还有的坑就是,好多人的用的都是springboot1.5版本,在pom引入fastdfs依赖(1.25.x)是有冲突的,最后在网上找到了原作者的git账号,原作者的版本已经更新到1.26.2了,这里用的是最新的

       这里把fastdfs的一些简单操作代码分享下。

       

2.引入FastDfs依赖


   com.github.tobato
   fastdfs-client
   1.26.2


3.application.yml配置文件

# ===================================================================
# 分布式文件系统FDFS配置
# ===================================================================
fdfs:
  so-timeout: 1501
  connect-timeout: 2000
  thumb-image:             #缩略图生成参数
    width: 150
    height: 150
  tracker-list:            #TrackerList参数,支持多个
    - 127.0.0.1:22122

 4.controller 接口编写

package com.springbootfastdfs.controller;

import com.github.tobato.fastdfs.domain.MataData;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.sun.deploy.net.URLEncoder;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

@RestController
@Api(description = "fastdfs接口API")
public class TestApi {

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    /**
     * 文件上传
     *
     * @param file
     * @return
     * @throws IOException
     */
    @ApiOperation("文件上传")
    @PostMapping("/uppload")
    public StorePath test(@RequestParam MultipartFile file) throws IOException {

        // 设置文件信息
        Set mataData = new HashSet<>();
        mataData.add(new MataData("author", "zonghui"));
        mataData.add(new MataData("description", "xxx文件,嘿嘿嘿"));

        // 上传   (文件上传可不填文件信息,填入null即可)
        StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), mataData);

        return storePath;
    }

    /**
     * 文件删除
     *
     * @param path
     * @return
     */
    @ApiOperation("文件删除")
    @DeleteMapping("/delete")
    public String delete(@RequestParam String path) {

        // 第一种删除:参数:完整地址
        fastFileStorageClient.deleteFile(path);

        // 第二种删除:参数:组名加文件路径
        // fastFileStorageClient.deleteFile(group,path);

        return "恭喜恭喜,删除成功!";
    }


    /**
     * 文件下载
     *
     * @param path
     * @return
     */
    @ApiOperation("文件下载")
    @GetMapping("/download")
    public void downLoad(@RequestParam String group, @RequestParam String path, @RequestParam String fileName, HttpServletResponse response) throws IOException {

        // 获取文件
        byte[] bytes = fastFileStorageClient.downloadFile(group, path, new DownloadByteArray());

        //设置相应类型application/octet-stream        (注:applicatoin/octet-stream 为通用,一些其它的类型苹果浏览器下载内容可能为空)
        response.reset();
        response.setContentType("applicatoin/octet-stream");
        //设置头信息                 Content-Disposition为属性名  附件形式打开下载文件   指定名称  为 设定的fileName
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        // 写入到流
        ServletOutputStream out = response.getOutputStream();
        out.write(bytes);
        out.close();
    }

}

你可能感兴趣的:(SpringBoot2.0整合Fastdfs 示例)