fastdfs-client-java 文件上传
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
导入jar包:fastdfs_client_v1.20.jar
配置文件:fdfs.conf
#fastDFS配置信息 charset = UTF-8 tracker_server = 139.196.152.232:22122 http.tracker_http_port = 80 connect_timeout = 5 network_timeout = 30 http.anti_steal_token = no http.secret_key = FastDFS1234567890
源码:
接口
/**
 * 
 */
package com.bsh.common.service;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.FileInfo;
/**
 * <b>FastDFS文件存储服务接口</b>
 * 
 * 
 * 
 */
public interface FdfsFileService {
	/**
	 * 上传文件(文件路径方式)
	 * @param file_path 文件路径
	 * @param file_ext_name 文件后缀
	 * @param meta_list 文件附属相关信息 (例如:图片的width:120、author:XXX等)
	 * @return url 文件url
	 */
	public String upload_file(String file_path,String file_ext_name, NameValuePair[] meta_list) throws Exception;
	/**
	 * 上传文件(字节流方式)
	 * @param file_path 文件路径
	 * @param file_ext_name 文件后缀
	 * @param meta_list 文件附属相关信息 (例如:图片的width:120、author:XXX等)
	 * @return url 文件url
	 */
	public String upload_file(byte file_buff[],String file_ext_name, NameValuePair[] meta_list) throws Exception;
	/**
	 * 上传文件-可修改(文件路径方式)
	 * @param file_path 文件路径
	 * @param file_ext_name 文件后缀
	 * @param meta_list 文件附属相关信息 (例如:图片的width:120、author:XXX等)
	 * @return url 文件url
	 */
	public String upload_appender_file(String file_path,String file_ext_name, NameValuePair[] meta_list) throws Exception;
	/**
	 * 上传文件-可修改(字节流方式)
	 * @param file_path 文件路径
	 * @param file_ext_name 文件后缀
	 * @param meta_list 文件附属相关信息 (例如:图片的width:120、author:XXX等)
	 * @return url 文件url
	 */
	public String upload_appender_file(byte file_buff[],String file_ext_name, NameValuePair[] meta_list) throws Exception;
	/**
	 * 修改可修改文件(appender上传)
	 * @param group_name
	 * @param remote_filename
	 * @param file_buff
	 * @return 0  修改成功
	 */
	public int modify_appender_file(String group_name, String remote_filename, byte file_buff[]) throws Exception;
	
	
	/**
	 * 下载文件
	 * @param group_name 文件组
	 * @param remote_filename 文件路径(上传文件时返回的值)
	 * @return 文件字节流
	 */
	public byte[] download_file(String remote_filename) throws Exception;
	
	/**
	 * 文件删除
	 * @param group_name 文件组
	 * @param remote_filename 文件路径
	 * @return 0 删除成功
	 */
	public int delete_file(String remote_filename) throws Exception;
	
	/**
	 * 文件信息
	 * @return FileInfo 文件存储信息
	 */
	public FileInfo get_file_info(String remote_filename) throws Exception;
	/**
	 * 文件附属相关信息
	 * @return NameValuePair 数组
	 */
	public NameValuePair[] get_metadata(String remote_filename) throws Exception;
	
}
实现类
package com.bsh.common.service.impl;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import com.bsh.common.service.FdfsFileService;
/**
 * FastDFS文件存储服务实现
 * 
 * 
 */
public class FdfsFileServiceImpl implements FdfsFileService {
	private static FdfsFileServiceImpl service;
	private String conf_file_path = "fdfs.conf";
	private static final String GROUP = "allies";
	private FdfsFileServiceImpl(){}
	
	/**
	 * Spring初始化服务
	 */
	public void init() {
		service = this;
		service.conf_file_path = this.conf_file_path;
		try {
              //配置文件路径
			String filePath = FdfsFileService.class.getResource("/").toURI().getPath() + service.conf_file_path;
			ClientGlobal.init(filePath);
		} catch (Exception e) {
			System.err.println("FastDFS初始化失败");
			e.printStackTrace();
		}
	}
	/**
	 * 初始化服务
	 */
	public static FdfsFileService getInstance(String conf_file_path) {
		if (service == null) {
			service = new FdfsFileServiceImpl();
		}
		service.conf_file_path = conf_file_path;
		try {
			ClientGlobal.init(FdfsFileService.class.getResource("/").getPath() + service.conf_file_path);
		} catch (Exception e) {
			System.err.println("FastDFS初始化失败");
			e.printStackTrace();
		}
		return service;
	}
	
	/**
	 * 获得客服端连接
	 * 
	 * @return
	 * @throws Exception
	 */
	private StorageClient getClient() throws Exception {
		return new StorageClient(new TrackerClient().getConnection(), null);
	}
	@Override
	public String upload_file(String file_path, String file_ext_name,
			NameValuePair[] meta_list) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		String[] fileIds = null;
		try {
			fileIds = client.upload_file(file_path, file_ext_name, meta_list);
		} catch (Exception e) {
			throw new Exception("FastDFS文件上传失败", e);
		}
		return fileIds[1];
	}
	@Override
	public String upload_file(byte file_buff[], String file_ext_name,
			NameValuePair[] meta_list) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		String[] fileIds = null;
		try {
			fileIds = client.upload_appender_file(file_buff, file_ext_name,
					meta_list);
		} catch (Exception e) {
			throw new Exception("FastDFS文件上传失败", e);
		}
		return fileIds[1];
	}
	@Override
	public byte[] download_file(String remote_filename)
			throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		return client.download_file(GROUP, remote_filename);
	}
	@Override
	public int delete_file(String remote_filename)
			throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		return client.delete_file(GROUP, remote_filename);
	}
	@Override
	public FileInfo get_file_info(String remote_filename)
			throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		return client.get_file_info(GROUP, remote_filename);
	}
	@Override
	public NameValuePair[] get_metadata(String remote_filename) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		return client.get_metadata(GROUP, remote_filename);
		
	}
	public void setConf_file_path(String conf_file_path) {
		this.conf_file_path = conf_file_path;
	}
	@Override
	public String upload_appender_file(String file_path,
			String file_ext_name, NameValuePair[] meta_list) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		String[] fileIds = null;
		try {
			fileIds = client.upload_appender_file(file_path, file_ext_name, meta_list);
		} catch (Exception e) {
			throw new Exception("FastDFS文件上传失败", e);
		}
		return fileIds[1];
	}
	@Override
	public String upload_appender_file(byte[] file_buff,
			String file_ext_name, NameValuePair[] meta_list) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		String[] fileIds = null;
		try {
			fileIds = client.upload_appender_file(file_buff, file_ext_name, meta_list);
		} catch (Exception e) {
			throw new Exception("FastDFS文件上传失败", e);
		}
		return fileIds[1];
	}
	@Override
	public int modify_appender_file(String group_name, String appdender_filename,
			byte[] file_buff) throws Exception {
		StorageClient client = null;
		try {
			client = service.getClient();
		} catch (Exception e) {
			throw new Exception("FastDFS获取连接失败", e);
		}
		return client.modify_file(group_name, appdender_filename, 0, file_buff);
	}
	
}
调用工具类
package com.bsh.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import com.bsh.common.service.FdfsFileService;
import cn.osworks.aos.core.asset.AOSPropertiesHandler;
/**
 * 文件上传工具
 *
 */
@Component
@Lazy(false)
public class UploadUtils {
	
	static FdfsFileService fdfsFileService;
	
	public static FdfsFileService getFdfsFileService() {
		return fdfsFileService;
	}
	
	@Autowired
	public void setFdfsFileService(FdfsFileService fdfs) {
		fdfsFileService = fdfs;
	}
	
	//dfs新方法
	public static String save(MultipartFile file) {
		String picUrl = "";
		String[] extNameStr=file.getOriginalFilename().split("\\.");
		String extName=extNameStr[1];
		if (!file.isEmpty()) {
			try {
				picUrl = fdfsFileService.upload_file(file.getBytes(), extName, null);
                   //返回地址加上图片服务器域名
				picUrl=AOSPropertiesHandler.getProperty("pic_server")+"/"+picUrl.split("/")[3];
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
            return picUrl;
		}
		return picUrl;
	}
}
    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号