-
传送门链接
上一篇博客已经讲完了fastdfs安装,现在我们接着将fastdfs与nginx整合并且使用Java客户端操作fastdfs。未安装fastdfs的可通过上面的传送门进行安装,废话不多说,我们直接进入正题。
接着我们进入到上篇中解压好的fastdfs/conf目录:
cd /usr/local/games/fastdfs/conf
将http.conf和mime.types拷贝到/etc/fdfs目录下:
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
然后直接进入我们之前解压好的fastdfs-nginx-module/src目录:cd fastdfs-nginx-module/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所需要的依赖:
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目录,然后进行配置编译:./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,图片访问成功!
-
整合Java
下载java客户端:下载传送门
这是一个maven项目。我们导入maven项目到开发工具。直接进行maven install
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;
}
}