1.在maven中引入FastDfs 的包
org.csource.fastdfs
fastdfs
commons-fileupload
commons-fileupload
2.由于文件上传是可以复用 的,所以创建一个工具类
public class FastDFSClient {private TrackerClient trackerClient = null;
private TrackerServer trackerServer = null;
private StorageClient1 storageClient1 =null;
private StorageServer storageServer = 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;
storageClient1 = new StorageClient1(trackerServer,storageServer);
}/**
* 上传文件方法
* 【在项目中使用FastDfs的一些配置】Title: uploadFile
* Description:
* @param fileName 文件全路径
* @param extName 文件扩展名,不包含(.)
* @param metas 文件扩展信息
* @return
* @throws Exception
*/
public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception{
String result = storageClient1.upload_file1(fileName, extName, metas);
return result;
}public String uploadFile(String fileName,String extName) throws Exception{
return uploadFile(fileName,extName,null);
}public String uploadFile(String fileName) throws Exception{
return uploadFile(fileName,null,null);
}/**
* 上传文件方法
* Title: uploadFile
* Description:
* @param fileContent 文件的内容,字节数组
* @param extName 文件扩展名
* @param metas 文件扩展信息
* @return
* @throws Exception
*/public String uploadFile(byte[] fileContent,String extName,NameValuePair[] metas) throws Exception{
String result = storageClient1.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);
}}
进行调用:
3.配置 web.xml, 写上文件上传 的配置:
4.配置application.properties 中 FastDfs 服务器IP
FILE_SERVER_URL=http://192.168.25.133/( FastDfs若是与dubbo 一起使用,虚拟机需要采用NAT 模式且要使用一个网段。例如 xxx.xxx.25. xx )
文章图片
5.加入fdf_client.conf 配置文件
# connect timeout in seconds
# default value is 30s
connect_timeout=30# network timeout in seconds
# default value is 30s
network_timeout=60# the base path to store log files
base_path=/home/fastdfs# tracker_server can ocur more than once, and tracker_server format is
#"host:port", host can be hostname or ip address
tracker_server=192.168.25.133:22122#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf#HTTP settings
http.tracker_server_port=80#use "#include" directive to include HTTP other settiongs
##include http.conf
6.Controller 的例子
@RestController
public class UploadController { @Value("${FILE_SERVER_URL}")
//获取服务器IP
private String file_server_url;
@RequestMapping("/upload")
public Result upload(MultipartFile file){String originalFilename = file.getOriginalFilename();
//获取文件名
String extName=originalFilename.substring( originalFilename.lastIndexOf(".")+1);
//得到扩展名try {
util.FastDFSClient client=new FastDFSClient("classpath:config/fdfs_client.conf");
String fileId = client.uploadFile(file.getBytes(), extName);
String url=file_server_url+fileId;
//图片完整地址
return new Result(true, url);
} catch (Exception e) {
e.printStackTrace();
return new Result(false, "上传失败");
} }}
7.页面,采用angular.js
controller:
//上传图片
$scope.uploadFile=function(){
uploadService.uploadFile().success(
function(response){
if(response.success){
$scope.entity.pic= response.message;
}else{
alert(response.message);
}
}
).error(
function(){
alert("上传出错");
}
);
}service:
//上传文件
this.uploadFile=function(){
var formdata=https://www.it610.com/article/new FormData();
formdata.append('file',file.files[0]);
//file 文件上传框的namereturn $http({
url:'../upload.do',
method:'post',
data:formdata,
headers:{ 'Content-Type':undefined },
transformRequest: angular.identity
});
}
推荐阅读
- FastDHT(分布式hash系统)安装和与FastDFS整合实现自定义文件ID
- 分布式文件系统TFS(taobao File System)安装
- FastDFS(二)之原生java API的操作
- FastDFS安装和测试
- FastDFS注意事项