• FastDFS文件操作-java


    未安装fastdfs先安装:FastDFS安装配置(CentOS7),接下来写个测试demo。

    创建demo项目

    1、pom.xml引入依赖

    	<!-- fastDFS依赖就一个 -->
    	<dependencies>
    		<dependency>
    			<groupId>net.oschina.zcx7878</groupId>
    			<artifactId>fastdfs-client-java</artifactId>
    			<version>1.27.0.0</version>
    		</dependency>
    	</dependencies>

     2、配置文件

    fdfs_client.conf

    connect_timeout = 2
    network_timeout = 30
    charSet = UTF-8
    http.tracker_http_port = 80
    http.anti_steal_token = no
    http.secret_key = FastDFS1234567890
    tracker_server = 192.168.1.104:22122

    3、代码

    (1)FastDfsUtil.java工具类(仅供参考)

    package com.fdfs.demo;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.csource.common.MyException;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.FileInfo;
    import org.csource.fastdfs.StorageClient;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    
    /**
     * 
    * @ClassName: FastDfsUtil 
    * @Description: FastDfs文件管理简单工具类
    * @author zhoujie 
    * @date 2018年11月27日 下午6:10:16 
    * @version V1.0
     */
    public class FastDfsUtil {
    	
    	private static TrackerClient trackerClient = null;
    	private static TrackerServer trackerServer = null;
    	private static StorageServer storageServer = null;
    	private static StorageClient storageClient = null;
    
    	static {
    		try {
    			ClientGlobal.init("fdfs_client.conf");
    			trackerClient = new TrackerClient();
    			trackerServer = trackerClient.getConnection();
    			storageClient = new StorageClient(trackerServer, storageServer);
    		} catch (IOException | MyException e) {
    			throw new RuntimeException("FastDfs工具类初始化失败!");
    		}
    	}
    	
    	/**
    	 * 
    	* @Title: fdfsUpload 
    	* @Description: 通过文件流上传文件
    	* @param @param inputStream 文件流
    	* @param @param filename 文件名称
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException 
    	* @return String 返回文件在FastDfs的存储路径   
    	* @throws
    	 */
    	public static String fdfsUpload(InputStream inputStream, String filename) throws IOException, MyException{
    		String suffix = ""; //后缀名
    		try{
    			suffix = filename.substring(filename.lastIndexOf(".")+1);
    		}catch (Exception e) {
    			throw new RuntimeException("参数filename不正确!格式例如:a.png");
    		}
    		String savepath = ""; //FastDfs的存储路径   
    		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
    	    byte[] buff = new byte[1024];  
    		int len = 0;  
    		while ((len = inputStream.read(buff)) != -1) {  
    			swapStream.write(buff, 0, len);  
    		}
    		byte[] in2b = swapStream.toByteArray();  
    		String[] strings = storageClient.upload_file(in2b, suffix, null); //上传文件
    		for (String str : strings) {
    			savepath += "/" + str; //拼接路径
    		}
    		return savepath;
    	}
    	
    	/**
    	 * 
    	* @Title: fdfsUpload 
    	* @Description: 本地文件上传
    	* @param @param filepath 本地文件路径
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException    
    	* @return String 返回文件在FastDfs的存储路径   
    	* @throws
    	 */
    	public static String fdfsUpload(String filepath) throws IOException, MyException{
    		String suffix = ""; //后缀名
    		try{
    			suffix = filepath.substring(filepath.lastIndexOf(".")+1);
    		}catch (Exception e) {
    			throw new RuntimeException("上传的不是文件!");
    		}
    		String savepath = ""; //FastDfs的存储路径   
    		String[] strings = storageClient.upload_file(filepath, suffix, null); //上传文件
    		for (String str : strings) {
    			savepath += "/" + str; //拼接路径
    		}
    		return savepath;
    	}
    	
    	/**
    	 * 
    	* @Title: fdfsDownload 
    	* @Description: 下载文件到目录
    	* @param @param savepath 文件存储路径
    	* @param @param localPath 下载目录
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException    
    	* @return boolean 返回是否下载成功
    	* @throws
    	 */
    	public static boolean fdfsDownload(String savepath, String localPath) throws IOException, MyException{
    		String group = ""; //存储组
    		String path = ""; //存储路径
    		try{
    			int secondindex = savepath.indexOf("/", 2); //第二个"/"索引位置
    			group = savepath.substring(1, secondindex); //类似:group1
    			path = savepath.substring(secondindex + 1); //类似:M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png
    		}catch (Exception e) {
    			throw new RuntimeException("传入文件存储路径不正确!格式例如:/group1/M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png");
    		}
    		int result = storageClient.download_file(group, path, localPath);
    		if(result != 0){
    			throw new RuntimeException("下载文件失败:文件路径不对或者文件已删除!");
    		}
    		return true;
    	}
    	
    	/**
    	 * 
    	* @Title: fdfsDownload 
    	* @Description: 返回文件字符数组
    	* @param @param savepath 文件存储路径
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException    
    	* @return byte[] 字符数组
    	* @throws
    	 */
    	public static byte[] fdfsDownload(String savepath) throws IOException, MyException{
    		byte[] bs = null;
    		String group = ""; //存储组
    		String path = ""; //存储路径
    		try{
    			int secondindex = savepath.indexOf("/", 2); //第二个"/"索引位置
    			group = savepath.substring(1, secondindex); //类似:group1
    			path = savepath.substring(secondindex + 1); //类似:M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png
    		}catch (Exception e) {
    			throw new RuntimeException("传入文件存储路径不正确!格式例如:/group1/M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png");
    		}
    		bs = storageClient.download_file(group, path); //返回byte数组
    		return bs;
    	}
    	
    	/**
    	 * 
    	* @Title: fdfsDeleteFile 
    	* @Description: 删除文件
    	* @param @param savepath 文件存储路径
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException    
    	* @return boolean 返回true表示删除成功   
    	* @throws
    	 */
    	public static boolean fdfsDeleteFile(String savepath) throws IOException, MyException{
    		String group = ""; //存储组
    		String path = ""; //存储路径
    		try{
    			int secondindex = savepath.indexOf("/", 2); //第二个"/"索引位置
    			group = savepath.substring(1, secondindex); //类似:group1
    			path = savepath.substring(secondindex + 1); //类似:M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png
    		}catch (Exception e) {
    			throw new RuntimeException("传入文件存储路径不正确!格式例如:/group1/M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png");
    		}
    		int result = storageClient.delete_file(group, path); //删除文件,0表示删除成功
    		if(result != 0){
    			throw new RuntimeException("删除文件失败:文件路径不对或者文件已删除!");
    		}
    		return true;
    	}
    	
    	/**
    	 * 
    	* @Title: fdfdFileInfo 
    	* @Description: 返回文件信息
    	* @param @param savepath 文件存储路径
    	* @param @return
    	* @param @throws IOException
    	* @param @throws MyException    
    	* @return FileInfo 文件信息
    	* @throws
    	 */
    	public static FileInfo fdfdFileInfo(String savepath) throws IOException, MyException{
    		String group = ""; //存储组
    		String path = ""; //存储路径
    		try{
    			int secondindex = savepath.indexOf("/", 2); //第二个"/"索引位置
    			group = savepath.substring(1, secondindex); //类似:group1
    			path = savepath.substring(secondindex + 1); //类似:M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png
    		}catch (Exception e) {
    			throw new RuntimeException("传入文件存储路径不正确!格式例如:/group1/M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png");
    		}
    		FileInfo fileInfo = storageClient.get_file_info(group, path);
    		return fileInfo;
    	}
    	
    }
    

    (2)Test.java测试

    package com.fdfs.demo;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.csource.common.MyException;
    
    public class Test {
    
    	public static void main(String[] args) {
    		
    		try {
    			System.out.println("存储路径:"+FastDfsUtil.fdfsUpload("F:/图片/02.jpg")); //上传文件。。。注意路径
    			//System.out.println(FastDfsUtil.fdfdFileInfo("/group1/M00/00/00/wKgBaFv9HJeAMaseAAIWRj8eKZQ103.jpg").toString()); //文件信息
    			//System.out.println(FastDfsUtil.fdfsDeleteFile("/group1/M00/00/00/wKgBaFv9HJeAMaseAAIWRj8eKZQ103.jpg")); //删除文件
    			//System.out.println(FastDfsUtil.fdfsUpload(new FileInputStream(new File("F:/图片/02.jpg")), "02.jpg"));//通过文件流上传文件
    			//System.out.println(FastDfsUtil.fdfsDownload("/group1/M00/00/00/wKgBaFv9acaANK2oAAIWRj8eKZQ339.jpg").length); //获取文件byte[]
    			//System.out.println(FastDfsUtil.fdfsDownload("/group1/M00/00/00/wKgBaFv9acaANK2oAAIWRj8eKZQ339.jpg", "D:/logs")); //下载文件到本地(拒绝访问)
    		} catch (IOException | MyException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	
    }

    ok!

    效果:

    可以直接浏览器预览

    http://192.168.1.104/group1/M00/00/00/wKgBaFwXZd2ALGUxAAIWRj8eKZQ220.jpg

    ojbk,!!!

    demo下载

  • 相关阅读:
    基于layui的简易后台管理系统,后期会更新
    java基础语法知识(笔记)——(一)基本变量类型,循环,日期类
    JavaWeb学习总结(笔记)——SSM spring.xml的基本配置
    JavaWeb学习总结(笔记)——SSM中Web.xml文件
    JavaWeb学习总结(笔记)——SSM关键类及其作用
    JavaWeb学习总结(笔记)——关于SSM CRUD上传功能的总结
    JavaWeb——MVC与三层结构
    jquery结合highcharts插件显示实时数据动态曲线图
    jquery结合Highcharts插件实现动态数据仪表盘图形化显示效果
    在IE6/7下表格td标签没有内容时不显示边框?
  • 原文地址:https://www.cnblogs.com/qq1995/p/10358972.html
Copyright © 2020-2023  润新知