Springboot集成fastdfs完成上传图片,返回url地址

精选30+云产品,助力企业轻松上云!>>> hot3.png

1.引入依赖

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.7</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2.application.yml编写配置文件

fdfs:
    so-timeout: 2500       #读取时间
    connect-timeout: 600   # 连接超时时间
    thumb-image:           # 缩略图
        width: 100
        height: 100
    tracker-list:          # tracker服务配置地址列表
    - 192.168.52.77:22122
    -
upload:
  base-url: http://192.168.52.77/
  allow-types:
    - image/jpeg
    - image/jpg
    - image/png
    - image/bmp
    - image/gif

3.UploadProperties.java 配置类

/**
 * @author 王一宁
 * @date 2020/3/26 11:14
 */
@ConfigurationProperties(prefix = "upload")
public class UploadProperties {

    private String baseUrl;
    private List<String> allowTypes;

    public String getBaseUrl() {
        return baseUrl;
    }

    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    public List<String> getAllowTypes() {
        return allowTypes;
    }

    public void setAllowTypes(List<String> allowTypes) {
        this.allowTypes = allowTypes;
    }
}

4.UploadService.java 服务层

@Service
@EnableConfigurationProperties(UploadProperties.class)
public class UploadService {

    private Log log= LogFactory.getLog(UploadService.class);

    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private UploadProperties prop;

    public String uploadImage(MultipartFile file) {
        // 1、校验文件类型
        String contentType = file.getContentType();
        if (!prop.getAllowTypes().contains(contentType)) {
            throw new RuntimeException("文件类型不支持");
        }

        // 2、校验文件内容
        try {
            BufferedImage image = ImageIO.read(file.getInputStream());
            if (image == null || image.getWidth() == 0 || image.getHeight() == 0) {
                throw new RuntimeException("上传文件有问题");
            }
        } catch (IOException e) {
            log.error("校验文件内容失败....{}", e);
            throw new RuntimeException("校验文件内容失败"+e.getMessage());
        }
        try {

            // 3、上传到FastDFS
            // 3.1、获取扩展名
            String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
            // 3.2、上传
            StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), extension, null);
            // 返回路径
            return prop.getBaseUrl() + storePath.getFullPath();
        } catch (IOException e) {
            log.error("【文件上传】上传文件失败!....{}", e);
            throw  new RuntimeException("【文件上传】上传文件失败!"+e.getMessage());
        }
    }
}

5.UploadController.java 控制层

@RestController
@RequestMapping("upload")
public class UploadController {

    @Autowired
    private UploadService uploadService;

    @RequestMapping("doUpload")
    @ResponseBody //返回界面一个map<"path","....">
    public Map<String,Object> doUpload(MultipartFile mf){
        System.out.println(mf.getOriginalFilename());
        Map<String, Object> upload =new HashMap<>();
        String path = this.uploadService.uploadImage(mf);
        upload.put("path",path);
        return upload;
    }

}

6.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>文件上传</h1>
<hr>
<form action="/upload/doUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="mf">
    <input type="submit" value="上传">
</form>
</body>
</html>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Boot集成FastDFS可以通过以下步骤实现: 1. 添加FastDFS依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.27.2</version> </dependency> ``` 2. 配置FastDFS连接信息 在application.properties文件中添加以下配置: ```properties # FastDFS配置 fdfs.tracker-list=192.168.1.100:22122,192.168.1.101:22122 fdfs.connect-timeout=500 fdfs.so-timeout=30000 fdfs.read-timeout=60000 ``` 其中,fdfs.tracker-list为FastDFS Tracker服务器列表,可以配置多个,用逗号分隔;fdfs.connect-timeout、fdfs.so-timeout、fdfs.read-timeout分别为连接、读取、写入超时时间。 3. 编写FastDFS文件上代码 可以通过以下代码实现文件上: ```java @Service public class FastDFSFileService { @Autowired private FastFileStorageClient fastFileStorageClient; public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); return storePath.getFullPath(); } } ``` 其中,FastFileStorageClient是FastDFS提供的文件存储客户端,可以通过@Autowired注入使用;uploadFile方法用于上文件,返回文件在FastDFS中的路径。 4. 编写FastDFS文件下载代码 可以通过以下代码实现文件下载: ```java @Service public class FastDFSFileService { @Autowired private DownloadByteArray callback; @Autowired private FastFileStorageClient fastFileStorageClient; public byte[] downloadFile(String filePath) { return fastFileStorageClient.downloadFile(filePath, callback); } } ``` 其中,DownloadByteArray是FastDFS提供的文件下载回调接口,可以通过@Autowired注入使用;downloadFile方法用于下载文件,返回文件的字节数组。 以上就是Spring Boot集成FastDFS的基本步骤,可以根据实际需求进行扩展和优化。 ### 回答2: FastDFS是一个开源的分布式文件系统,采用了多台服务器集群来存储文件,并具有高可靠性、高扩展性和高性能的优点。而SpringBoot是一个快速构建企业级应用的开发框架,可以帮助开发者更加便捷地集成第三方库和框架。 在SpringBoot集成FastDFS,需要按照以下步骤进行操作: 1. 添加FastDFS的依赖 在pom.xml文件中,添加FastDFS的依赖: ```xml <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.27.1</version> </dependency> ``` 2. 配置FastDFS的连接信息 在application.properties(或application.yml)文件中,配置FastDFS的连接信息,如下: ```properties fdfs.tracker-list=192.168.1.100:22122,192.168.1.101:22122 ``` 3. 创建FastDFS的存储客户端 创建FastDFS的存储客户端,代码如下: ```java @Configuration public class FdfsClientConfig { @Bean public DefaultFastFileStorageClient storageClient() { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getTrackerServer(); StorageServer storageServer = new StorageServer(trackerServer,null); return new DefaultFastFileStorageClient(trackerServer, storageServer); } } ``` 4. 使用FastDFS存储文件 在使用过程中,调用FastDFS的存储客户端,使用FastDFS存储文件。例如: ```java @Autowired private DefaultFastFileStorageClient storageClient; public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); return storePath.getFullPath(); } ``` 在以上代码中,首先注入FastDFS的存储客户端,然后调用其uploadFile方法,将文件存储到FastDFS中,并返回文件的路径。 通过以上四步,就可以在SpringBoot中成功集成FastDFS,并使用FastDFS来存储文件,以达到分布式存储和高可靠性的目的。 ### 回答3: SpringBoot是一个快速开发框架,能够快速开发各种类型的Java应用程序。FastDFS是一个轻量级的分布式文件系统,用于存储大文件。本文将介绍如何使用SpringBoot集成FastDFS。 一、搭建FastDFS环境 1. 安装libfastcommon $ tar zxvf libfastcommon-1.0.7.tar.gz $ cd libfastcommon-1.0.7 $ ./make.sh $ sudo ./make.sh install 2. 安装FastDFS $ tar zxvf FastDFS_v5.11.tar.gz $ cd FastDFS $ ./make.sh $ sudo ./make.sh install 3. 配置Tracker服务器 在/etc/fdfs目录下创建tracker.conf文件,内容如下: port=22122 base_path=/var/fdfs/tracker log_level=info run_by_group=fastdfs run_by_user=fastdfs 4. 配置Storage服务器 在/etc/fdfs目录下创建storage.conf,内容如下: # mount point /mnt/hdd1 /mnt/hdd2 #Base path for file storage base_path=/var/fdfs/storage #Store path for file storge store_path0=/mnt/hdd1 store_path1=/mnt/hdd2 #Storage tracker server tracker_server=192.168.1.1:22122 5. 启动FastDFS服务 在不同的服务器上分别启动Tracker和Storage服务。 $ sudo /etc/init.d/fdfs_trackerd start $ sudo /etc/init.d/fdfs_storaged start 检查服务是否已启动: $ ps aux | grep fdfs 二、SpringBoot集成FastDFS 1. 添加maven依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.25.2</version> </dependency> 2. 配置文件 spring: #fastdfs配置 tracker-list: 192.168.1.1:22122 3. 编写代码 使用FastDFS需要创建TrackerClient和StorageClient两个对象。 通过TrackerClient对象可以得到Storage服务器地址。 通过StorageClient对象上文件和下载文件。 上: StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), fileExtName, null); String fullPath = storePath.getFullPath(); 下载: byte[] bytes = storageClient.downloadFile(group, path); return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).contentLength(bytes.length).body(bytes); 通过以上步骤,即可快速集成FastDFSSpringBoot中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding路人王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值