fastdfs与nginx整合,使用Java客户端操作fastdfs

上一篇博客已经讲完了fastdfs安装,现在我们接着将fastdfs与nginx整合并且使用Java客户端操作fastdfs。未安装fastdfs的可通过上面的传送门进行安装,废话不多说,我们直接进入正题。


接着我们进入到上篇中解压好的fastdfs/conf目录:
cd /usr/local/games/fastdfs/conf
http.confmime.types拷贝到/etc/fdfs目录下:

cp http.conf /etc/fdfs/

cp mime.types /etc/fdfs/

然后直接进入我们之前解压好的fastdfs-nginx-module/src目录:cd fastdfs-nginx-module/src/
可以看到以下内容:
src
mod_fastdfs.conf也拷贝到/etc/fdfs目录下
cp mod_fastdfs.conf /etc/fdfs/
修改刚拷贝的文件
vim /etc/fdfs/mod_fastdfs.conf
主要修改以下内容:

# tracker路径
base_path=/usr/local/FastDFS/tracker

# tracker服务
tracker_server=192.168.10.170:22122

# storage服务端口号
storage_server_port=23000

# 分组名称
group_name=group1

# 地址中是否包含分组名
url_have_group_name = true

# 存储路径个数
store_path_count=1

# 存储路径
store_path0=/usr/local/FastDFS

# 分组个数
group_count = 1

# 分组配置
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/local/FastDFS
  • 创建M00至存储目录连接

    ln -s /usr/local/FastDFS/data/M00
    
  • 下载nginx

    下载nginx

    然后我们安装nginx所需要的依赖:

    yum -y install pcre pcre-devel
    
    yum -y install zlib zlib-devel
    
    yum -y install openssl openssl-devel
    

    将下载好的nginx进行解压:tar xvf nginx-1.15.8.tar.gz
    nginx
    进入我们解压号的nginx目录,然后进行配置编译:

    ./configure --prefix=/usr/local/nginx-1.15.8 --add-module=/usr/local/games/fastdfs-nginx-module/src
    
    # prefix:安装目录
    # add-module:解压后fastdfs-nginx-module/src所在的位置
    

    配置编译应该没有问题。然后我们直接进行安装:

    make && make install
    

    安装完成之后,我们进入安装目录:

    cd /usr/local/nginx-1.15.8/
    

    修改nginx配置文件:vim conf/nginx.conf,修改内容如下:

    # 新增一个服务,监听之前配置开放的端口号
    server {
    	listen    9527; #对应之前开放的端口号
    	server_name    localhost;
    
    	location / {
    	    root   html;
    	    index   index.html index.htm;
    	}
    
    	location ~/group([0-9])/M00 {
    	    ngx_fastdfs_module;
    	}
    	
    	error_page 500 502 503 504 /50x.html;
    	location = /50x.html {
    	    root   html;
    	}
    }
    

    然后开启nginx:./sbin/nginx

OK,至此我们配置完成,这个时候我们来上传一张图片测试一下。

修改一下fdfs下的客户端文件:vim /etc/fdfs/client.conf
修改以下内容:

# the base path to store log files
base_path=/usr/local/FastDFS/tracker

#  "host:port", host can be hostname or ip address
tracker_server=192.168.10.170:22122

# 对应tracker中的开放端口
http.tracker_server_port=9527

保存完毕之后我们随便上传一张图片到FastDFS文件服务器上

fdfs_upload_file /etc/fdfs/client.conf timg.gif

# 这个时候会返回一个文件ID
group1/M00/00/00/wKgKqlwx18KAT9umABOnzW9uiS8730.gif

# 然后我们再用浏览器访问
http://192.168.10.170:9527/group1/M00/00/00/wKgKqlwx18KAT9umABOnzW9uiS8730.gif

图片
OK,图片访问成功!

这是一个maven项目。我们导入maven项目到开发工具。直接进行maven install
maven
fastdfs-client-java就成功的被安装到本地仓库了。日志中可以看到安装仓库位置。

然后将fdfs_client.conf拷贝到自己的工程里,只需要修改一下内容:tracker_server = 192.168.10.170:22122

  • 代码示例
/**
 * 上传头像
 * 
 * @param avatar
 * @param sysUserId
 * @return
 * @throws Exception
 */
@Override
@Transactional(rollbackFor = Exception.class)
public JsonResult uploadAvatar(MultipartFile avatar, String sysUserId) throws Exception {
	String path = FastDFSUtil.upload(avatar);
	if (StringUtil.isNotBlank(path)) {
		path = sysDefaultServerUrl + path;
		SysUser sysUser = get(sysUserId);
		String oldAvatar = sysUser.getAvatar();
		String fileId = oldAvatar.replaceAll(sysDefaultServerUrl, "");
		FastDFSUtil.delete(fileId);
		sysUser.setAvatar(path);
		update(sysUser);
		return new JsonResult(HttpStatus.OK, "操作成功", sysUser);
	}
	throw new CustomException(HttpStatus.INTERNAL_SERVER_ERROR, "上传文件失败");
}

FastDFSUtil

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

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;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.multipart.MultipartFile;

public class FastDFSUtil {

	private static final ClassPathResource RESOURCE = new ClassPathResource("fdfs_client.conf");

	public static String upload(MultipartFile file) throws Exception {
		ClientGlobal.init(RESOURCE.getClassLoader().getResource("fdfs_client.conf").getPath());
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
		StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);

		String filename = file.getOriginalFilename();
		String suffix = filename.substring(filename.lastIndexOf("."));
		String size = String.valueOf(file.getSize());

		NameValuePair[] metas = new NameValuePair[4];
		metas[0] = new NameValuePair("filename", filename);
		metas[1] = new NameValuePair("suffix", suffix);
		metas[2] = new NameValuePair("size", size);
		metas[3] = new NameValuePair("uploadTime", String.valueOf(System.currentTimeMillis()));

		String path = storageClient1.upload_file1(file.getBytes(), suffix, metas);
		return path;
	}

	public static byte[] download(String fileId) throws Exception {
		ClientGlobal.init(RESOURCE.getClassLoader().getResource("fdfs_client.conf").getPath());
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
		StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);

		byte[] file = storageClient1.download_file1(fileId);
		return file;
	}

	public static int delete(String fileId) throws Exception {
		ClientGlobal.init(RESOURCE.getClassLoader().getResource("fdfs_client.conf").getPath());
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
		StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);

		int code = storageClient1.delete_file1(fileId);
		return code;
	}

	public static Map<String, String> getFileInfo(String fileId) throws Exception {
		ClientGlobal.init(RESOURCE.getClassLoader().getResource("fdfs_client.conf").getPath());
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer = trackerClient.getConnection();
		StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
		StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);

		Map<String, String> data = new HashMap<>(0);
		NameValuePair[] valuePairs = storageClient1.get_metadata1(fileId);
		if (valuePairs != null && valuePairs.length > 0) {
			for (NameValuePair nameValuePair : valuePairs) {
				data.put(nameValuePair.getName(), nameValuePair.getValue());
			}
		}
		return data;
	}

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值