fastdfs文件服务器-客户端实现

原创 2015年11月19日 13:50:53

需要的依赖:

<!-- fastdfs jar依赖 -->
		<dependency>
			<groupId>org.csource</groupId>
			<artifactId>fastdfs</artifactId>
			<version>1.0.0</version>
		</dependency>

dfs的配置文件:

connect_timeout = 2000
network_timeout = 30000
charset = ISO8859-1
http.tracker_http_port = 8080
http.anti_steal_token = false
http.secret_key = FastDFS1234567890


tracker_server.length = 1
tracker_server1 = 182.92.105.142:22122


客户端client java:

package com.citic.gatz.service.impl;

import java.io.InputStream;
import java.net.InetSocketAddress;
import java.util.Properties;

import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerGroup;
import org.csource.fastdfs.TrackerServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class FdfsUpload {
    private final static Logger logger = LoggerFactory.getLogger(FdfsUpload.class);

    public FdfsUpload() {
        try {
        	//URL fileURL= this.getClass().getResource("/fdfs_client.conf");     
            //ClientGlobal.init(fileURL.getFile());
        	//返回读取指定资源的输入流    
            InputStream is=this.getClass().getResourceAsStream("/fdfs_client.conf");
            Properties p = new Properties();
            p.load(is);
            ClientGlobal.setG_connect_timeout(Integer.valueOf(p.getProperty("connect_timeout")));
            ClientGlobal.setG_network_timeout(Integer.valueOf(p.getProperty("network_timeout")));
            ClientGlobal.setG_charset(p.getProperty("charset"));
            ClientGlobal.setG_tracker_http_port(Integer.valueOf(p.getProperty("http.tracker_http_port")));
            ClientGlobal.setG_anti_steal_token(Boolean.valueOf(p.getProperty("http.anti_steal_token")));
            ClientGlobal.setG_secret_key(p.getProperty("http.secret_key"));
            
            //tracker_server
            String ip = p.getProperty("tracker_server1").split(":")[0];
            Integer port = Integer.valueOf(p.getProperty("tracker_server1").split(":")[1]);
            InetSocketAddress[] tracker_servers = new InetSocketAddress[Integer.valueOf(p.getProperty("tracker_server.length"))];
            tracker_servers[0] = new InetSocketAddress(ip, port);
			ClientGlobal.setG_tracker_group(new TrackerGroup(tracker_servers));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("fastdfs init failed e={}", e);
        }
        logger.info("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
        logger.info("connect_timeout=" + ClientGlobal.g_connect_timeout + "ms");
        logger.info("charset=" + ClientGlobal.g_charset);
        
    }

    public String upload(byte[] filebuf, String filename) {
        try {

            TrackerClient tc = new TrackerClient();

            TrackerServer ts = tc.getConnection();
            if (ts == null) {
                logger.info("getConnection return null");
                return null;
            }

            StorageServer ss = tc.getStoreStorage(ts);
            if (ss == null) {
                logger.info("getStoreStorage return null");
            }

            StorageClient1 sc1 = new StorageClient1(ts, ss);

            // NameValuePair[] metaList = new NameValuePair[1];
            // metaList[0] = new NameValuePair("fileName",
            // filename);//ChAL8VXSinWAHYvqAAC6gGlp1Zs535.pcm-m中记录文件名
            String fileid = sc1.upload_file1(filebuf, filename.substring(filename.lastIndexOf(".") + 1), null);
            
            // sc1.upload_file(file_buff, file_ext_name, meta_list)

            logger.info("Upload local file " + filename + " ok, fileid=" + fileid);
            return fileid;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }

    }
    
    public byte[] download(String fileId) {
        try {

            TrackerClient tc = new TrackerClient();

            TrackerServer ts = tc.getConnection();
            if (ts == null) {
                logger.info("getConnection return null");
                return null;
            }

            StorageServer ss = tc.getStoreStorage(ts);
            if (ss == null) {
                logger.info("getStoreStorage return null");
            }

            StorageClient1 sc1 = new StorageClient1(ts, ss);

            // NameValuePair[] metaList = new NameValuePair[1];
            // metaList[0] = new NameValuePair("fileName",
            // filename);//ChAL8VXSinWAHYvqAAC6gGlp1Zs535.pcm-m中记录文件名
           // String fileid = sc1.upload_file1(filebuf, filename.substring(filename.lastIndexOf(".") + 1), null);
            logger.info("download file ok, fileid =" + fileId);
            return sc1.download_file1(fileId);
            // sc1.upload_file(file_buff, file_ext_name, meta_list)

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
    
    public int delete(String fileId) {
    	try {
            TrackerClient tc = new TrackerClient();
            TrackerServer ts = tc.getConnection();
            if (ts == null) {
                logger.info("getConnection return null");
                return -1;
            }
            StorageServer ss = tc.getStoreStorage(ts);
            if (ss == null) {
                logger.info("getStoreStorage return null");
                return -1;
            }
            StorageClient1 sc1 = new StorageClient1(ts, ss);
            
            int i = sc1.delete_file1(fileId);
            logger.info("delete file ok, fileid =" + fileId);
            return i;

        } catch (Exception ex) {
            return -1;
        }
    }
}

初始化配置文件的方式有两种:

1.直接使用ClientGlobal.init(file);初始化配置文件的方式

2.ClientGloabl.setXX();使用set参数注入的方式

版权声明:本文为博主原创文章,未经博主允许不得转载。

FastDFS分布文件系统Java客户端使用

官网Java客户端源代码:https://github.com/happyfish100/fastdfs-client-java 我已经将源码打包成一个jar,下载后导入到你的工程中即可。如果你是用...

FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码

调用的API为: String[] upload_file( String group_name,//组名,不指定则可设为null long file_size,//文件大小,必须制定 Upl...
  • Poechant
  • Poechant
  • 2011年11月18日 10:38
  • 14715

FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码

本文来自 诗商·柳惊鸿 Poechant CSDN博客,转载请注明源地址:FastDFS的配置、部署与API使用解读(2)上传文件到FastDFS分布式文件系统的客户端代码 在阅读本文之前,...
  • Poechant
  • Poechant
  • 2011年11月18日 10:27
  • 32067

FastDFS分布文件系统Java客户端使用

原文链接:http://blog.csdn.net/xyang81/article/details/52847311FastDFS分布式文件系统服务安装和使用请参考上一篇文章《 FastDFS分布式文...
  • xyang81
  • xyang81
  • 2016年10月18日 11:42
  • 10331

转载:FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码

本文转载自:诗商·柳惊鸿CSDN博客,链接为:http://blog.csdn.net/poechant/article/details/7213536 转载目的仅仅为方便博主自己学习。   调...

c++服务器与android客户端进行文件传输功能的实现

c++服务器与android通过socket网络编程进行文件传输解决方案 项目最新成品:http://blog.csdn.net/nuptboyzhb/article/details/8611179...

Linux下通过socket通信实现客户端向服务器发送文件

linux下Socket通信实现文件传输!
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fastdfs文件服务器-客户端实现
举报原因:
原因补充:

(最多只允许输入30个字)