10、SpringBoot2.0集成FastDFS(十)

前言:由于本篇博客是建立在上一个博客上写的,所以阅读本篇博客之前需要先看下文件上传功能的实现https://blog.csdn.net/yang_guang3/article/details/100015770
1、引入pom文件:

<dependency>
    <groupId>org.csource</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27-SNAPSHOT</version>
</dependency>

有些小伙伴在引入该依赖时可能会报错,是因为中央仓库并没有集成该依赖,需要下载该jar包然后打包到本地仓库,下载fastdfs-client-java开发工具包:
https://github.com/happyfish100/fastdfs-client-java
解压后cmd进入该文件下,然后运行下面的Maven指令:
mvn clean install
2、在resources文件夹下新增fdfs_client.conf文件:

connect_timeout = 60
network_timeout = 60
charset = UTF-8
http.anti_steal_token = no
http.secret_key = 123456
#FastDFS服务器的IP地址
tracker_server = 192.168.53.85:22122
tracker_server = 192.168.53.86:22122

3、新增FastDFS核心类:
FastDFSClient:

package com.xhy.xczx.fastdfs;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FastDFSClient {
	private static org.slf4j.Logger logger = LoggerFactory.getLogger(FastDFSClient.class);

	static {
		try {
			String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
			ClientGlobal.init(filePath);
		} catch (Exception e) {
			logger.error("FastDFS Client Init Fail!",e);
		}
	}

	public static String[] upload(FastDFSFile file) {
		logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length);

		NameValuePair[] meta_list = new NameValuePair[1];
		meta_list[0] = new NameValuePair("author", file.getAuthor());

		long startTime = System.currentTimeMillis();
		String[] uploadResults = null;
		StorageClient storageClient=null;
		try {
			storageClient = getTrackerClient();
			uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
		} catch (IOException e) {
			logger.error("IO Exception when uploadind the file:" + file.getName(), e);
		} catch (Exception e) {
			logger.error("Non IO Exception when uploadind the file:" + file.getName(), e);
		}
		logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms");

		if (uploadResults == null && storageClient!=null) {
			logger.error("upload file fail, error code:" + storageClient.getErrorCode());
		}
		String groupName = uploadResults[0];
		String remoteFileName = uploadResults[1];

		logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName);
		return uploadResults;
	}

	public static FileInfo getFile(String groupName, String remoteFileName) {
		try {
			StorageClient storageClient = getTrackerClient();
			return storageClient.get_file_info(groupName, remoteFileName);
		} catch (IOException e) {
			logger.error("IO Exception: Get File from Fast DFS failed", e);
		} catch (Exception e) {
			logger.error("Non IO Exception: Get File from Fast DFS failed", e);
		}
		return null;
	}

	public static InputStream downFile(String groupName, String remoteFileName) {
		try {
			StorageClient storageClient = getTrackerClient();
			byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
			InputStream ins = new ByteArrayInputStream(fileByte);
			return ins;
		} catch (IOException e) {
			logger.error("IO Exception: Get File from Fast DFS failed", e);
		} catch (Exception e) {
			logger.error("Non IO Exception: Get File from Fast DFS failed", e);
		}
		return null;
	}

	public static void deleteFile(String groupName, String remoteFileName)
			throws Exception {
		StorageClient storageClient = getTrackerClient();
		int i = storageClient.delete_file(groupName, remoteFileName);
		logger.info("delete file successfully!!!" + i);
	}

	public static StorageServer[] getStoreStorages(String groupName)
			throws IOException {
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		return trackerClient.getStoreStorages(trackerServer, groupName);
	}

	public static ServerInfo[] getFetchStorages(String groupName,
												String remoteFileName) throws IOException {
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
	}

	public static String getTrackerUrl() throws IOException {
		return "http://"+getTrackerServer().getInetSocketAddress().getHostString()+":"+ClientGlobal.getG_tracker_http_port()+"/";
	}

	private static StorageClient getTrackerClient() throws IOException {
		TrackerServer trackerServer = getTrackerServer();
		StorageClient storageClient = new StorageClient(trackerServer, null);
		return  storageClient;
	}

	private static TrackerServer getTrackerServer() throws IOException {
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		return  trackerServer;
	}
}
FastDFSFile:
public class FastDFSFile {
private String name;

private byte[] content;

private String ext;

private String md5;

private String author;

public FastDFSFile(String name, byte[] content, String ext, String height,
				   String width, String author) {
	super();
	this.name = name;
	this.content = content;
	this.ext = ext;
	this.author = author;
}

public FastDFSFile(String name, byte[] content, String ext) {
	super();
	this.name = name;
	this.content = content;
	this.ext = ext;

}
//set和get方法,自动生成
}

在UploadController类中添加以下方法:

private static Logger logger = LoggerFactory.getLogger(UploadController.class);
@RequestMapping("/uploadFile1")
    public ModelAndView uploadFile1(@RequestParam("file") MultipartFile file, ModelAndView modelAndView) {
        modelAndView.setViewName("uploadStatus");
        if (file.isEmpty()) {
            modelAndView.addObject("message","上传失败,请选择一个文件上传");
            return modelAndView;
        }
        try {
            String path=saveFile(file);
            modelAndView.addObject("path","上传成功,文件路径为:" + path);
            modelAndView.addObject("message","上传成功,上传的文件名为:" + file.getOriginalFilename());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return modelAndView;
    }

public String saveFile(MultipartFile multipartFile) throws IOException {
        String[] fileAbsolutePath={};
        String fileName=multipartFile.getOriginalFilename();
        String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
        byte[] file_buff = null;
        InputStream inputStream=multipartFile.getInputStream();
        if(inputStream!=null){
            int len1 = inputStream.available();
            file_buff = new byte[len1];
            inputStream.read(file_buff);
        }
        inputStream.close();
        FastDFSFile file = new FastDFSFile(fileName, file_buff, ext);
        try {
            fileAbsolutePath = FastDFSClient.upload(file);  //upload to fastdfs
        } catch (Exception e) {
            logger.error("upload file Exception!",e);
        }
        if (fileAbsolutePath==null) {
            logger.error("upload file failed,please upload again!");
        }
        String path=FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1];
        return path;
    }

然后重启项目,访问:
http://localhost:8081/uploadFile1
测试结果:
在这里插入图片描述
显示上传成功,然后访问文件路径,证明上传成功:
在这里插入图片描述
该文件的存放位置对应于storage服务器上的
/home/fastdfs/store_path0/data/00/00/wKgZhV1ff36AHWlhAAKh5tVfKAA742.jpg
博主使用的FastDFS文件存储服务器使用的是虚拟机,镜像已上传到百度盘,如需请添加公众号:post教程,后台回复FastDFS:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rsun04551

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

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

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

打赏作者

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

抵扣说明:

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

余额充值