依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
</dependency>
客户端工具
public class FastDFSClient {
private final static String FAST_DFS_CLIENT_CONF_NAME = "fastdfs-client.properties";
private final static String METADATA_FILE_NAME = "fileName";
private final static String METADATA_FILE_EXT = "fileExt";
private final static String METADATA_FILE_SIZE = "fileSize";
public FastDFSClient() {
init();
}
private void init() {
String path = null;
try {
ClientGlobal.initByProperties("/Users/mac/project/opnc/trunk/opnc/opnc/opnc-parent/opnc-config/opnc-config-portal/opnc-config-portal-server/src/main/resources/fastdfs-client.properties");
} catch (Exception e) {
log.info(LogFormat.formatMsg("FastDFSClient.init", "FAST_DFS_CLIENT_CONF_NAME=" + FAST_DFS_CLIENT_CONF_NAME + ",absolutePath=" + path, "init fastDFS-config fail"));
LogUtil.getTrace(e);
}
}
public static String[] upload(MultipartFile file) {
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
NameValuePair[] metaList = new NameValuePair[]{
new NameValuePair(METADATA_FILE_NAME, file.getOriginalFilename()),
new NameValuePair(METADATA_FILE_EXT, extension),
new NameValuePair(METADATA_FILE_SIZE, String.valueOf(file.getSize()))
};
return storageClient.upload_file(file.getBytes(), extension, metaList);
} catch (Exception e) {
log.info(LogFormat.formatMsg("FastDFSClient.upload", "", "upload file error"));
LogUtil.getTrace(e);
}
return null;
}
public static InputStream downFile(String groupName, String remoteFileName) {
InputStream ins = null;
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
ins = new ByteArrayInputStream(fileByte);
} catch (Exception e) {
e.printStackTrace();
}
return ins;
}
public static boolean deleteFile(String groupName, String remoteFileName) {
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
int errno = storageClient1.delete_file1(remoteFileName);
if (errno == 0) {
log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "groupName=" + groupName + ",remoteFileName=" + remoteFileName, "deleteFile success"));
return true;
}
log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "groupName=" + groupName + ",remoteFileName=" + remoteFileName + ",errno=" + errno, "deleteFile fail"));
return false;
} catch (Exception e) {
log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "", "deleteFile error"));
LogUtil.getTrace(e);
}
return false;
}
public static NameValuePair[] getFileInfo(String groupName, String remoteFileName) {
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
return storageClient.get_metadata(groupName, remoteFileName);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
配置文件
fastdfs.connect_timeout_in_seconds=60
fastdfs.network_timeout_in_seconds=60
fastdfs.charset=UTF-8
fastdfs.http_tracker_http_port=80
fastdfs.tracker_servers=192.168.0.90:22122
上传文件的接口
public BaseResp uploadAndGet(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "param") String param, HttpServletResponse response) {
log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "file=" + file.getOriginalFilename() + "param=" + param, "start..."));
BaseResp resp = new BaseResp();
String[] upload = FastDFSClient.upload(file);
if (upload == null) {
log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "file=" + file.getOriginalFilename(), "upload fail,upload array is null"));
resp.setErrCode("9999");
resp.setErrMsg("上传失败");
return resp;
}
String dir = upload[0] + "/" + upload[1];
log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "", "dir=" + dir));
resp.setErrMsg("成功,dir=" + dir);
InputStream in = null;
try {
in = FastDFSClient.downFile(upload[0], upload[1]);
byte[] buffer = new byte[in.available()];
in.read(buffer);
response.setContentLength(buffer.length);
response.setHeader("Content-Disposition", "attachment;filename=" + "remoteFileName");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(buffer);
outputStream.flush();
} catch (Exception e) {
LogUtil.getTrace(e);
}
return resp;
}