一个基本开发框架的整合演化之路--9、整合文件服务器fastdfs
前言
目前文件服务器的中间件是比较多的,第三方的有七牛,也有阿里云,不过如果是自己搭建的话通常都是fastdfs了,下面就spring+xxl-conf配置中心+fastdfs做一下整合。
初始化配置中心的数据
实际上手动输入数据是很容易出错的,而且有三个环境,test、ppe、product,手滑了输错一个配置,到时候错问题,报null,正式环境都挂了谁能负起这种责任,下面是一份用来初始化各个环境下面配置的脚本:
create or replace function "initFdfsConfig"(
in envName varchar,
in para_appname varchar
)
returns varchar
as $BODY$
declare _defaultValues varchar;
declare _envName varchar;
declare _appname varchar;
declare _prefix varchar;
declare strArrays varchar[];
declare arrItemLv1 varchar;
declare tempArrSubItem varchar;
declare valArrs varchar[];
declare item_attr varchar;
declare item_title varchar;
declare item_val varchar;
begin
if envName <> 'test' and envName<> 'ppe' and envName<> 'product' then
raise notice '环境变量异常,只能为test、ppe以及product其中一个。';
return '环境变量异常,只能为test、ppe以及product其中一个。';
end if;
_appname:=para_appname;
_prefix:=concat(_appname,'.fdfs.','');
_defaultValues:=
'connect_timeout_in_seconds->连接fdfs服务器超时时间(单位:秒)->5$$' ||
'network_timeout_in_seconds->网络连接超时时间(单位:秒)->30$$' ||
'charset->字符集->UTF-8$$' ||
'anti_steal_token->token 防盗链功能->false$$' ||
'secret_key->注意,只有在防盗链开启以后这个**才有用->FastDFS1234567890$$' ||
'tracker_http_port->tracker服务器的http端口【默认为80】->80$$' ||
'tracker_servers->tracker服务器列表【多个用英文逗号分隔】->localhost:22122$$' ||
'visit_url->外网访问图片文件的url地址->http://localhost/$$'
;
strArrays:=string_to_array(_defaultValues,'$$');
_envName:=envName;
insert into xxl_conf_project ("appname", title) values (_appname,_appname) on conflict ("appname") do nothing;
<<loop4BigArray>>
foreach arrItemLv1 in array strArrays
loop
if char_length(arrItemLv1) < 1 then
raise notice '空字符串无须处理';
continue ;
end if;
valArrs:=string_to_array(arrItemLv1,'->');
item_attr:=valArrs[1];
item_title:=valArrs[2];
item_val:=valArrs[3];
raise notice '属性名称:%,描述:%,当前值:%',item_attr,item_title,item_val;
raise notice '开始添加记录';
insert into xxl_conf_node("env","key","appname","title","value")
values (_envName,concat(_prefix,item_attr),_appname,item_title,item_val)
on conflict ("env","key") do nothing ;
end loop loop4BigArray;
return envName||'环境下的'||_appName||'配置成功';
end;
$BODY$ language plpgsql volatile ;
-- 记住执行下面方法分别添加三个环境下的默认数据。
-- select "initFdfsConfig"('test','file-server');
-- select "initFdfsConfig"('ppe','file-server');
-- select "initFdfsConfig"('product','file-server');
用工具远程登录配置中心的数据库,直接执行即可:
select "initFdfsConfig"('test','file-server');
select "initFdfsConfig"('ppe','file-server');
select "initFdfsConfig"('product','file-server');
编写配置类以及对应插件
要用到一个view object bean:
用于上传文件到fastdfs
package net.w2p.WebExt.vo;
import java.io.Serializable;
import java.util.Arrays;
/**
* @ClassName FastDFSFile
* @Description FastDFS上传文件业务对象
* @author zhangkai
* @date 2017年7月18日
*/
public class FastDFSFile implements Serializable{
private static final long serialVersionUID = 2637755431406080379L;
/**
* 文件二进制
*/
private byte[] content;
/**
* 文件名称
*/
private String name;
/**
* 文件长度
*/
private Long size;
public FastDFSFile(){
}
public FastDFSFile(byte[] content, String name, Long size){
this.content = content;
this.name = name;
this.size = size;
}
public byte[] getContent() {
return content;
}
public void setContent(byte[] content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getSize() {
return size;
}
public void setSize(Long size) {
this.size = size;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
对应配置类是:
package net.w2p.WebExt.config;
/***
*
'connect_timeout_in_seconds->连接fdfs服务器超时时间(单位:秒)->5$$' ||
'network_timeout_in_seconds->网络连接超时时间(单位:秒)->30$$' ||
'charset->字符集->UTF-8$$' ||
'anti_steal_token->token 防盗链功能->false$$' ||
'secret_key->注意,只有在防盗链开启以后这个**才有用->FastDFS1234567890$$' ||
'tracker_http_port->tracker服务器的http端口【默认为80】->80$$' ||
'tracker_servers->tracker服务器列表【多个用英文逗号分隔】->localhost:22122$$' ||
'visit_url->外网访问图片文件的url地址->http://localhost/$$'
;
*
* ***/
public class FdfsConf {
public Integer connect_timeout_in_seconds = 5;
public Integer network_timeout_in_seconds = 5;
public String charset = "";
public Boolean anti_steal_token = false;
public String secret_key = "";
public Integer tracker_http_port = 80;
public String tracker_servers = "";
public String visit_url = "";
public Integer getConnect_timeout_in_seconds() {
return connect_timeout_in_seconds;
}
public void setConnect_timeout_in_seconds(Integer connect_timeout_in_seconds) {
this.connect_timeout_in_seconds = connect_timeout_in_seconds;
}
public Integer getNetwork_timeout_in_seconds() {
return network_timeout_in_seconds;
}
public void setNetwork_timeout_in_seconds(Integer network_timeout_in_seconds) {
this.network_timeout_in_seconds = network_timeout_in_seconds;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public Boolean getAnti_steal_token() {
return anti_steal_token;
}
public void setAnti_steal_token(Boolean anti_steal_token) {
this.anti_steal_token = anti_steal_token;
}
public String getSecret_key() {
return secret_key;
}
public void setSecret_key(String secret_key) {
this.secret_key = secret_key;
}
public Integer getTracker_http_port() {
return tracker_http_port;
}
public void setTracker_http_port(Integer tracker_http_port) {
this.tracker_http_port = tracker_http_port;
}
public String getTracker_servers() {
return tracker_servers;
}
public void setTracker_servers(String tracker_servers) {
this.tracker_servers = tracker_servers;
}
public String getVisit_url() {
return visit_url;
}
public void setVisit_url(String visit_url) {
this.visit_url = visit_url;
}
}
对应plugin插件:
package net.w2p.WebExt.Plugins;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.URL;
import java.util.Properties;
import net.w2p.WebExt.config.FdfsConf;
import net.w2p.WebExt.vo.FastDFSFile;
import org.apache.commons.io.FilenameUtils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
/**
* @ClassName FastDFSUtils
* @Description FastDFS工具类
* @author zhangkai
* @date 2017年7月18日
*/
public class FastDFSPlugin implements Serializable {
/**
*
*/
public final long serialVersionUID = -4462272673174266738L;
private TrackerClient trackerClient;
private TrackerServer trackerServer;
private StorageClient1 storageClient1;
private Properties config;
private FdfsConf setting = null;
public FastDFSPlugin(FdfsConf setting) {
this.setting = setting;
config = new Properties();
config.setProperty("fastdfs.connect_timeout_in_seconds", this.setting.connect_timeout_in_seconds + "");
config.setProperty("fastdfs.network_timeout_in_seconds", this.setting.network_timeout_in_seconds + "");
config.setProperty("fastdfs.charset", this.setting.charset);
config.setProperty("fastdfs.http_anti_steal_token", this.setting.anti_steal_token + "");
config.setProperty("fastdfs.http_secret_key", this.setting.secret_key + "");
config.setProperty("fastdfs.http_tracker_http_port", this.setting.tracker_http_port + "");
config.setProperty("fastdfs.tracker_servers", this.setting.tracker_servers + "");
config.setProperty("fastdfs.visit_url", this.setting.visit_url + "");
try {
ClientGlobal.initByProperties(config);
//trackerclient
trackerClient = new TrackerClient();
trackerServer = trackerClient.getConnection();
//storageclient
storageClient1 = new StorageClient1(trackerServer, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/****
*
* 获取文件信息
*
* ****/
public FileInfo getFileInfo(String group,String name) throws Exception {
return storageClient1.query_file_info(group,name);
}
public FileInfo getFileInfo1(String fileid) throws Exception {
return storageClient1.query_file_info1(fileid);
}
/**
* fastDFS文件上传
*
* @param file 上传的文件 FastDFSFile
* @return String 返回文件的绝对路径
*/
public String uploadFile(FastDFSFile file) {
String path = null;
try {
//文件扩展名
String ext = FilenameUtils.getExtension(file.getName());
//mata list是表文件的描述
NameValuePair[] mata_list = new NameValuePair[3];
mata_list[0] = new NameValuePair("fileName", file.getName());
mata_list[1] = new NameValuePair("fileExt", ext);
mata_list[2] = new NameValuePair("fileSize", String.valueOf(file.getSize()));
path = storageClient1.upload_file1(file.getContent(), ext, mata_list);
} catch (Exception e) {
e.printStackTrace();
}
return path;
}
/**
* fastDFS文件下载
*
* @param groupName 组名
* @param remoteFileName 文件名
* @return ResponseEntity<byte [ ]>
*/
public byte[] downloadFile(String groupName, String remoteFileName) {
byte[] content = null;
try {
content = storageClient1.download_file(groupName, remoteFileName);
} catch (Exception e) {
e.printStackTrace();
}
return content;
}
/**
* 根据fastDFS返回的path得到文件的组名
*
* @param path fastDFS返回的path
* @return
*/
public String getGroupFormFilePath(String path) {
return path.split("/")[0];
}
/**
* 根据fastDFS返回的path得到文件名
*
* @param path fastDFS返回的path
* @return
*/
public String getFileNameFormFilePath(String path) {
return path.substring(path.indexOf("/") + 1);
}
public String getVisitUrl() {
return this.setting.visit_url;
}
}
使用java代码整合到spring中进行设置
在FileServerWebApp的BeanConfiguration下面添加:
package net.w2p.local.plugins.BeanConfiguration;
import com.xxl.conf.core.XxlConfClient;
import net.w2p.WebExt.Plugins.FastDFSPlugin;
import net.w2p.WebExt.config.FdfsConf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/****
*
* 文件存储服务器配置
* ****/
@Configuration
public class FastDFSConfiguration {
@Bean(name="fdfsConf")
public FdfsConf fdfsConf(){
final String VarPrefix ="file-server.fdfs.";
FdfsConf conf=new FdfsConf();
conf.connect_timeout_in_seconds= XxlConfClient.getInt(VarPrefix+"connect_timeout_in_seconds");
conf.network_timeout_in_seconds=XxlConfClient.getInt(VarPrefix+"network_timeout_in_seconds");
conf.charset=XxlConfClient.get(VarPrefix+"charset");
conf.anti_steal_token=XxlConfClient.getBoolean(VarPrefix+"anti_steal_token");
conf.secret_key=XxlConfClient.get(VarPrefix+"secret_key");
conf.tracker_http_port=XxlConfClient.getInt(VarPrefix+"tracker_http_port");
conf.tracker_servers=XxlConfClient.get(VarPrefix+"tracker_servers");
conf.visit_url=XxlConfClient.get(VarPrefix+"visit_url");
return conf;
}
@Bean("fdfsPlugin")
@Autowired
public FastDFSPlugin fdfsPlugin(@Qualifier("fdfsConf")FdfsConf fdfsConf){
return new FastDFSPlugin(fdfsConf);
}
}
进行测试
下面对测试进行说明。
使用的素材图片是百度上面的,这个:
25kb左右,使用工具转换为base64字符串为:
data:image/jpeg;base64,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
下面是测试用代码:
@Autowired
FastDFSPlugin fastDFSPlugin;
@Test
public void testFastdfsPlugin(){
final String img_base64="data:image/jpeg;base64,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";
//--将base64转换为图片数据。
int pos=img_base64.indexOf(',');
String strBase64="";
if(pos!=-1){strBase64= img_base64.substring(pos+1);}
else{strBase64=img_base64;}
BASE64Decoder decoder = new BASE64Decoder();
try{
byte[] b = decoder.decodeBuffer(strBase64);//转码得到图片数据
FastDFSFile fdfsfile=new FastDFSFile();fdfsfile.setSize(Long.parseLong(img_base64.length()+""));fdfsfile.setName("avatar1.jpg");fdfsfile.setContent(b);
String filePath=fastDFSPlugin.uploadFile(fdfsfile);
System.out.println(filePath);
}
catch (Exception ed){
ed.printStackTrace();return;
}
}
测试结果:
已经上传成功,根据返回来的地址,从浏览器中访问一下:
好了,fastdfs的整合完成。