FastDFS

(1)FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

(2)CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。

CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

上传域实现多上传 添加属性multiple

如果你的maven中没有maven的jar包在cmd中运行以下代码
mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs -Dversion=1.2 -Dpackaging=jar -Dfile=d:\setup\fastdfs_client_v1.20.jar

在引入依赖
<dependency>
<groupId>org.csource.fastdfs
<artifactId>fastdfs
<version>1.2
</dependency>

(2)添加配置文件fdfs_client.conf ,将其中的服务器地址设置为192.168.200.128
配置文件官方提供 管理者那里需要修改以下
tracker_server=192.168.200.128:22122修改自己的ip地址如果有备用机可以再加一个
tracker_server=192.168.200.129:22122

测试代码

// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init("D:\\itcastworkspaceMars\\fastDfsDemo\\src\\main\\resources\\fdfs_client.conf");
// 2、创建一个 TrackerClient 对象。直接 new 一个。
TrackerClient trackerClient = new TrackerClient();
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
TrackerServer trackerServer = trackerClient.getConnection();
// 4、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
StorageClient1 storageClient = new StorageClient1(trackerServer, null);
// 5、使用 StorageClient 对象上传图片。
//扩展名不带“.”
String path = storageClient.upload_file1("E:\\image\\Koala.jpg", "jpg", null);
// 6、包含组名和图片的路径。
System.out.println(path);

结果(单机版的地址里有ip和端口号如果是集群会有ip和端口号)
group1

M00/00/00/wKgZhVkMP4KAZEy-AAA-tCf93Fo973.jpg

自己封装的简单的工具类
import org.apache.commons.io.FilenameUtils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

public class FastDFSClient {

private TrackerClient trackerClient = null;
private TrackerServer trackerServer = null;
private StorageServer storageServer = null;
private StorageClient1 storageClient = null;

public FastDFSClient(String conf) throws Exception {
	if (conf.contains("classpath:")) {
		conf = conf.replace("classpath:", this.getClass().getResource("/").getPath());
	}
	ClientGlobal.init(conf);
	trackerClient = new TrackerClient();
	trackerServer = trackerClient.getConnection();
	storageServer = null;
	storageClient = new StorageClient1(trackerServer, storageServer);
}

/**
 * 上传文件方法
 * <p>Title: uploadFile</p>
 * <p>Description: </p>
 * @param fileName 文件全路径
 * @param extName 文件扩展名,不包含(.)
 * @param metas 文件扩展信息
 * @return
 * @throws Exception
 */
public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
	String result = storageClient.upload_file1(fileName, extName, metas);
	return result;
}

public String uploadFile(byte[] file, String fileName, long fileSize) throws Exception {
	NameValuePair[] metas = new NameValuePair[3];
	metas[0] = new NameValuePair("fileName", fileName);
	metas[1] = new NameValuePair("fileSize", String.valueOf(fileSize));
	metas[2] = new NameValuePair("fileExt", FilenameUtils.getExtension(fileName));
	String result = storageClient.upload_file1(file, FilenameUtils.getExtension(fileName), metas);
	return result;
}

public String uploadFile(String fileName) throws Exception {
	return uploadFile(fileName, null, null);
}

public String uploadFile(String fileName, String extName) throws Exception {
	return uploadFile(fileName, extName, null);
}

/**
 * 上传文件方法
 * <p>Title: uploadFile</p>
 * <p>Description: </p>
 * @param fileContent 文件的内容,字节数组
 * @param extName 文件扩展名
 * @param metas 文件扩展信息
 * @return
 * @throws Exception
 */
public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
	String result = storageClient.upload_file1(fileContent, extName, metas);
	return result;
}

public String uploadFile(byte[] fileContent) throws Exception {
	return uploadFile(fileContent, null, null);
}

public String uploadFile(byte[] fileContent, String extName) throws Exception {
	return uploadFile(fileContent, extName, null);
}
}

具体代码实现:
//文件服务器地址

@Value("${FILE_SERVER_URL}")//这个使用mvc的注解引入的值,用于读取图片用的单机版没有ip地址所以需要我们自己加上,储存端是集群不需要这个地址。
private String file_serve; 

@RequestMapping("/uploadFile")
public Result uploadFile(MultipartFile file) throws Exception {
    try {
        //1. 加载配置文件
        FastDFSClient fastDFS = new FastDFSClient("fastDFS/fdfs_client.conf");
        //2. 上传并返回文件路径, 第一个参数:文件内容, 第二个参数:文件名, 第三个参数:文件大小
        //返回的文件路径例如: group1/M00/00/01/wKjIgFulkuGAOgMpAAvqH_kipG8379.jpg
        String path = fastDFS.uploadFile(file.getBytes(), file.getOriginalFilename(), file.getSize());
        //3. 使用文件服务器IP+ 文件路径和名称组成完整路径
        String url = file_serve + path;
        return new Result(true, url);
    } catch (Exception e) {
        e.printStackTrace();
        return new Result(false, "上传失败!");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值