Spring Boot(四十三):Springboot整合FastDFS完成文件上传(1)

1.创建项目

Spring Boot(四十三):Springboot整合FastDFS完成文件上传(1)_第1张图片

 

2.添加引用

 

3.修改pom.xml

        
            net.oschina.zcx7878
            fastdfs-client-java
            1.27.0.0
        

        
            org.apache.commons
            commons-lang3
        

 

4.创建yml

fastdfs:
  connect_timeout_in_seconds: 120
  network_timeout_in_seconds: 120
  charset: UTF-8
  tracker_servers: 192.168.0.110:22122 #多个 trackerServer中间以逗号分隔

 

5.创建UploadService

package com.example.demo.utils;


import org.csource.fastdfs.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

@Component
public class UploadService {

    @Value("${fastdfs.tracker_servers}")
    private String tracker_servers;

    @Value("${fastdfs.connect_timeout_in_seconds}")
    private int connect_timeout;

    @Value("${fastdfs.network_timeout_in_seconds}")
    private int network_timeout;

    @Value("${fastdfs.charset}")
    private String charset;

    public Map upload(MultipartFile multipartFile){
        if (multipartFile == null) {
            throw new RuntimeException("文件不能为空");
        }
        // 上传至fastDFS, 返回文件id
        String fileId = this.fdfsUpload(multipartFile);
        if (StringUtils.isEmpty(fileId)) {
            System.out.println("上传失败");
            throw  new RuntimeException("上传失败");
        }
        Map map=new HashMap<>();
        map.put("code",200);
        map.put("msg","上传成功");
        map.put("fileId",fileId);
        return map;
    }


    /**
     * 上传至fastDFS
     * @param multipartFile
     * @return 文件id
     */
    private String fdfsUpload(MultipartFile multipartFile) {

        // 1. 初始化fastDFS的环境
        initFdfsConfig();
        // 2. 获取trackerClient服务
        TrackerClient trackerClient = new TrackerClient();
        try {
            TrackerServer trackerServer = trackerClient.getConnection();
            // 3. 获取storage服务
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            // 4. 获取storageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);

            // 5. 上传文件 (文件字节, 文件扩展名, )
            // 5.1 获取文件扩展名
            String originalFilename = multipartFile.getOriginalFilename();
            String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);

            // 5.2 上传
            String fileId = storageClient1.upload_file1(multipartFile.getBytes(), extName, null);
            return fileId;

        } catch (Exception ex) {
            System.out.println(ex);
            return null;
        }

    }


    /**
     * 初始化fastDFS的环境
     */
    private void initFdfsConfig() {
        try {
            ClientGlobal.initByTrackers(tracker_servers);

            ClientGlobal.setG_connect_timeout(connect_timeout);

            ClientGlobal.setG_network_timeout(network_timeout);

            ClientGlobal.setG_charset(charset);
        }catch (Exception ex)
        {
            System.out.println(ex);
        }
    }

}

 

6.创建UploadController

package com.example.demo.controller;


import com.example.demo.utils.UploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

@RestController
@RequestMapping("upload")
public class UploadController {
    @Autowired
    private UploadService uploadService;

    /**
     * 作上传
     */
    @RequestMapping("doUpload")
    public Map doUpload(MultipartFile mf){
        System.out.println(mf.getOriginalFilename());
        Map map = uploadService.upload(mf);
        return map;
    }
}

 

7.创建static/index.html




    
    Title




文件上传


 

8.测试

Spring Boot(四十三):Springboot整合FastDFS完成文件上传(1)_第2张图片

结果如下:

Spring Boot(四十三):Springboot整合FastDFS完成文件上传(1)_第3张图片

你可能感兴趣的:(SpringBoot,FastDFS)