fastdfs java 使用

简介:    fastdfs 安装详解   org.csource fastdfs-client-java 1.25   2 30 UTF-8 172.

 

 fastdfs 安装详解

 

	<!-- fastdfs start -->
			<dependency>
				<groupId>org.csource</groupId>
				<artifactId>fastdfs-client-java</artifactId>
				<version>1.25</version>
			</dependency>
			<!-- fastdfs end -->

 

 <!-- fdfs文件系统相关配置 fdfs_client.conf-->
	            <connect_timeout>2</connect_timeout>
	            <network_timeout>30</network_timeout>
	            <charset>UTF-8</charset>
	            <tracker_server>172.23.27.120:22122</tracker_server>
	            <http.anti_steal_token>no</http.anti_steal_token>
	            <http.secret_key></http.secret_key>
	            <http.tracker_http_port>8085</http.tracker_http_port>
	            <!-- fdfs文件系统相关配置 -->

 



 

 

package com.curiousby.cn.util;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;

/** 
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2017年3月28日 下午3:09:56
 * desc:
 */
public class FDFSFile {
    private String fileName;

    private String fileExt;

    private String fileSize;

    private byte[] content;

    public FDFSFile() {

    }

    public FDFSFile(String fileName, String fileExt, String fileSize, byte[] content) {
        this.fileName = fileName;
        this.fileExt = fileExt;
        this.fileSize = fileSize;
        this.content = content;
    }

    public FDFSFile(File file) {
        this.fileName = file.getName();
        this.fileExt = FilenameUtils.getExtension(file.getName());
        this.fileSize = String.valueOf(FileUtils.sizeOf(file));
        try {
            this.content = FileUtils.readFileToByteArray(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public FDFSFile(MultipartFile file) {
        this.fileName = file.getOriginalFilename();
        this.fileExt = FilenameUtils.getExtension(file.getOriginalFilename());
        this.fileSize = String.valueOf(file.getSize());
        try {
            this.content = file.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFileExt() {
        return fileExt;
    }

    public void setFileExt(String fileExt) {
        this.fileExt = fileExt;
    }

    public String getFileSize() {
        return fileSize;
    }

    public void setFileSize(String fileSize) {
        this.fileSize = fileSize;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }

}

 

package com.curiousby.cn.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.multipart.MultipartFile;

/** 
 * 
 * @author baoyou E-mail:curiousby@163.com
 * @version 2017年3月28日 下午3:09:51
 * desc:
 */
public class FDFSUtil {
    private static Logger logger = LoggerFactory.getLogger(FDFSUtil.class);
    public static final String CLIENT_CONFIG_FILE = "fdfs_client.conf";

    private static TrackerClient trackerClient;
    private static TrackerServer trackerServer;
    private static StorageServer storageServer;
    private static StorageClient1 storageClient;

    static {
        try {
            ClassPathResource cpr = new ClassPathResource(CLIENT_CONFIG_FILE);
            String fdfsConf = cpr.getFile().getAbsolutePath();
            logger.info("----fdfsConf----" + fdfsConf);

            // 初始化fdfs全局配置
            ClientGlobal.init(fdfsConf);

            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();

            storageClient = new StorageClient1(trackerServer, storageServer);

        } catch (Exception e) {
            logger.error("FDFSUtil init------------", e);
        }
    }

    /**
     * 
     * @param args
     */
    public static void main(String[] args) {

        // 上传
        File file = new File("C:\\Users\\cmcc-B100036\\Desktop\\截图\\fastdfs install monitor.png");
        FDFSFile fdfsFile = new FDFSFile(file);

        String fileId = FDFSUtil.upload(fdfsFile); 

        System.out.println(fdfsFile.getFileName());
        System.out.println(fdfsFile.getFileExt());
        System.out.println(fdfsFile.getFileSize());

        // 下载

        try {
            byte[] b = FDFSUtil.download(fileId);
            IOUtils.write(b,
                    new FileOutputStream("C:\\Users\\cmcc-B100036\\Desktop\\aaa.png"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 删除
       // int result = FDFSUtil.delete(fileId);

    }

    /**
     * @param file
     * @return
     */
    public synchronized static String upload(FDFSFile file) {
        logger.info("File Name: {};     File Length: {}", file.getFileName(), file.getFileSize());

        // 存储文件信息
        NameValuePair[] metaList = new NameValuePair[3];
        metaList[0] = new NameValuePair("fileName", file.getFileName());
        metaList[1] = new NameValuePair("fileExt", file.getFileExt());
        metaList[2] = new NameValuePair("fileSize", file.getFileSize());

        long startTime = System.currentTimeMillis();
        String uploadResult = null;
        try {
            uploadResult = storageClient.upload_file1(file.getContent(), file.getFileExt(),
                    metaList);
        } catch (IOException e) {
            logger.error("IO Exception when uploadind the file: " + file.getFileName(), e);
        } catch (Exception e) {
            logger.error("Non IO Exception when uploadind the file: " + file.getFileName(), e);
        }
        logger.info("upload_file time used: " + (System.currentTimeMillis() - startTime) + " ms");

        if (uploadResult == null) {
            logger.error("upload file fail, error code: " + storageClient.getErrorCode());
        }

        logger.info("upload file successfully!!!  " + "uploadResult: " + uploadResult);

        return uploadResult;
    }

    /**
     * @param mFiles
     * @return
     */
    public static String upload(MultipartFile[] mFiles) {
        logger.info("upload MultipartFile[]: {}", mFiles.length);
        if (ArrayUtils.isEmpty(mFiles)) {
            return "";
        }
        FDFSFile[] files = new FDFSFile[mFiles.length];
        for (int i = 0; i < mFiles.length; i++) {
            files[i] = new FDFSFile(mFiles[i]);
        }
        return upload(files);
    }

    /**
     * @param files
     * @return
     */
    public static String upload(FDFSFile[] files) {
        logger.info("upload FDFSFile[]: {}", files.length);

        String result = "";
        for (FDFSFile fdfsFile : files) {
            result += upload(fdfsFile) + ",";
        }
        if (StringUtils.isNotEmpty(result)) {
            result = result.substring(0, result.length() - 1);
        }
        logger.info("upload FDFSFile[]  result: {}", result);
        return result;
    }

    /**
     * 获取文件属性信息
     * 
     * @param fileId
     *            文件标识
     * @return FDFSFile:文件名,后缀名,大小
     */
    public static FDFSFile getFileMeta(String fileId) {
        logger.info("fileId--" + fileId);
        FDFSFile fdfsFile = new FDFSFile();
        try {
            NameValuePair[] nvps = storageClient.get_metadata1(fileId);
            if (nvps != null) {
                fdfsFile.setFileExt(nvps[0].getValue());
                fdfsFile.setFileName(nvps[1].getValue());
                fdfsFile.setFileSize(nvps[2].getValue());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        logger.info("getFileMeta info success!");

        return fdfsFile;
    }

    /**
     * 获取文件属性信息
     * 
     * @param fileIds
     *            多个文件标识,以,分隔
     * @return FDFSFile[]:文件名,后缀名,大小
     */
    public static FDFSFile[] getFileMetas(String fileIds) {
        logger.info("fileIds--" + fileIds);

        if (StringUtils.isEmpty(fileIds)) {
            return null;
        }
        String[] fileId = fileIds.split(",");
        FDFSFile[] fdfsFiles = new FDFSFile[fileId.length];
        for (int i = 0; i < fileId.length; i++) {
            fdfsFiles[i] = getFileMeta(fileId[i]);
        }

        return fdfsFiles;
    }

 

    /**
     * 下载文件
     * 
     * @param fileId
     *            文件标识
     * @return byte[]文件内容
     */
    public static byte[] download(String fileId) {
        logger.info("fileId--" + fileId);
        byte[] b = null;
        try {
            b = storageClient.download_file1(fileId);
        } catch (Exception e) {
            e.printStackTrace();
        }

        logger.info("download file successfully!!!  " + System.currentTimeMillis());
        return b;
    }

  

    /**
     * 删除文件
     * 
     * @param fileId
     * @return 0:成功
     */
    public static int delete(String fileId) {
        logger.info("fileId--" + fileId);
        int i = 1;
        try {
            i = storageClient.delete_file1(fileId);
            logger.info(i == 0 ? "删除成功" : "删除失败:" + i);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return i;
    }
 
 
    /**
     * 递归删除目录下的所有文件及子目录下所有文件
     * @param dir 将要删除的文件目录
     * @return boolean Returns "true" if all deletions were successful.
     *                 If a deletion fails, the method stops attempting to
     *                 delete and returns "false".
     */
    public static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            if (children != null) {
                //递归删除目录中的子目录下
                for (int i = 0; i < children.length; i++) {
                    boolean success = deleteDir(new File(dir, children[i]));
                    if (!success) {
                        return false;
                    }
                }
            }
        }
        // 目录此时为空,可以删除
        return dir.delete();
    }

   
   
    
    

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信捐助,加入it技术扣扣群),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

 

 

 

目录
相关文章
|
Java
java操作fastdfs包括文件上传、下载、删除
java操作fastdfs包括文件上传、下载、删除
345 0
java操作fastdfs包括文件上传、下载、删除
|
存储 Java Maven
FastDFS图片服务器java客户端的使用
FastDFS图片服务器java客户端的使用
FastDFS图片服务器java客户端的使用
|
Java Apache C#
吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
原文:吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通           事情是这样的,在一个新项目中引入了fastdfs,用这玩意做一些小数据的存储还是很方便的,然后在nuget上就找到了一个FastDFS的sdk,如下图:          一眼就看到了这个top1的sdk,应该会比较靠谱。
1606 0
|
Java 前端开发 开发工具
fastdfs 图片服务器 使用java端作为客户端上传图片
之前有说道搭建fastdfs作为图片服务器,但是没有说明如何真正在代码里调用,那么今天大致讲一下,如何使用java客户端进行上传 首先你得要有一个客户端,导入到eclipse中即可 git地址如下: https://github.
1306 0
|
Java Maven 测试技术
使用java调用fastDFS客户端进行静态资源文件上传
一、背景   上篇博客我介绍了FastDFS的概念、原理以及安装步骤,这篇文章我们来聊一聊如何在java中使用FastDFSClient进行静态资源的上传。 二、使用步骤   1.开发环境     spring+springmvc+maven   2.
2116 0
|
Web App开发 存储 Java
【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示
基于Nginx及FastDFS,完成商品图片的上传及展示 一、传统图片存储及展示方式      存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的存储空间有限,它是web应用服务器,而不是存储服务器。 3)web应用服务器的本身的io读写性能不高,图片上传下载时,速度偏慢 4)web应用服务器访问图片
3286 0
|
8天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
7天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
下一篇
无影云桌面