java 实现FastDFS 文件操作 1.下载FastClient并实现依赖Jar安装 访问余大github项目 地址为fastdfs-client-java 下载后导入Idea,修改项目Java编译版本,如图所示:
fastDFS java项目截图
使用Maven进行 编译和构建,dos窗口定位到该项目路径下,进行编译和构建
1 E:\fastdfs-client-java-master>mvn clean install
构建成功后,会在maven 本地仓库出现相关Jar包,如图所示:
依赖Jar构建成功
在需要进行文件操作的项目模块增加Pom文件依赖配置,配置内容如下:
1 2 3 4 5 6 <!-- fastdfs上传下载图片 路径和上面的pom中对应 --> <dependency> <groupId>org.csource.fastdfs-client-java</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27</version> </dependency>
2.增加FastDFS连接配置文件 在需要的项目模块资源配置文件夹下 src/resource 目录下新增配置文件 fdfs_client.properties 配置内容具体如下:
1 2 3 4 5 6 7 connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 8088 # tracker Http端口 http.anti_steal_token = no # 暂无作用 http.secret_key = FastDFS1234567890 # 暂无作用 tracker_server = 192.168.43.60:22122 # tracker Server地址信息
3.编写FastClient 工具类,用于封装文件操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 package com.gsww.ctyxy.util; import org.csource.common.MyException; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import java.io.BufferedOutputStream; import java.io.IOException; import java.net.URLDecoder; /** * FastDFS工具类【实现文件上传、下载、删除、查询】 * @author Zhangyongliang */ public class FastDFSClient { private TrackerClient trackerClient = null; private TrackerServer trackerServer = null; private StorageServer storageServer = null; private StorageClient1 storageClient = null; public FastDFSClient(String conf) throws Exception { if (conf.contains("classpath:")) { String path = URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().toString(),"UTF-8"); path=path.substring(6); conf = conf.replace("classpath:",URLDecoder.decode(path,"UTF-8")); } ClientGlobal.init(conf); trackerClient = new TrackerClient(); trackerServer = trackerClient.getConnection(); storageServer = null; storageClient = new StorageClient1(trackerServer, storageServer); } /** * 上传文件方法 * <p>Title: uploadFile</p> * <p>Description: </p> * @param fileName 文件全路径 * @param extName 文件扩展名,不包含(.) * @param metas 文件扩展信息 * @return * @throws Exception */ public String uploadFile(String fileName, String extName, NameValuePair[] metas) { String result=null; try { result = storageClient.upload_file1(fileName, extName, metas); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 上传文件,传fileName * @param fileName 文件的磁盘路径名称 如:D:/image/aaa.jpg * @return null为失败 */ public String uploadFile(String fileName) { return uploadFile(fileName, null, null); } /** * * @param fileName 文件的磁盘路径名称 如:D:/image/aaa.jpg * @param extName 文件的扩展名 如 txt jpg等 * @return null为失败 */ public String uploadFile(String fileName, String extName) { return uploadFile(fileName, extName, null); } /** * 上传文件方法 * <p>Title: uploadFile</p> * <p>Description: </p> * @param fileContent 文件的内容,字节数组 * @param extName 文件扩展名 * @param metas 文件扩展信息 * @return * @throws Exception */ public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) { String result=null; try { result = storageClient.upload_file1(fileContent, extName, metas); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 上传文件 * @param fileContent 文件的字节数组 * @return null为失败 * @throws Exception */ public String uploadFile(byte[] fileContent) throws Exception { return uploadFile(fileContent, null, null); } /** * 上传文件 * @param fileContent 文件的字节数组 * @param extName 文件的扩展名 如 txt jpg png 等 * @return null为失败 */ public String uploadFile(byte[] fileContent, String extName) { return uploadFile(fileContent, extName, null); } /** * 文件下载到磁盘 * @param path 图片路径 * @param output 输出流 中包含要输出到磁盘的路径 * @return -1失败,0成功 */ public int download_file(String path,BufferedOutputStream output) { int result=-1; try { byte[] b = storageClient.download_file1(path); try{ if(b != null){ output.write(b); result=0; } }catch (Exception e){} //用户可能取消了下载 finally { if (output != null){ try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取文件数组 * @param path 文件的路径 如group1/M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return */ public byte[] download_bytes(String path) { byte[] b=null; try { b = storageClient.download_file1(path); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return b; } /** * 删除文件 * @param group 组名 如:group1 * @param storagePath 不带组名的路径名称 如:M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return -1失败,0成功 */ public Integer delete_file(String group ,String storagePath){ int result=-1; try { result = storageClient.delete_file(group, storagePath); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * * @param storagePath 文件的全部路径 如:group1/M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return -1失败,0成功 * @throws IOException * @throws Exception */ public Integer delete_file(String storagePath){ int result=-1; try { result = storageClient.delete_file1(storagePath); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 获取远程服务器文件资源信息 * @param groupName 文件组名 如:group1 * @param remoteFileName M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return */ public FileInfo getFile(String groupName,String remoteFileName){ try { return storageClient.get_file_info(groupName, remoteFileName); } catch (Exception e) { e.printStackTrace(); } return null; } }
4.文件操作 在web 项目Controller层进行文件的操作
上传文件1 2 3 4 5 6 7 8 9 10 @RequestMapping(value = "file/uploadFast",method = RequestMethod.GET) public void uploadFast(HttpServletRequest request)throws Exception{ // 1、把FastDFS提供的jar包添加到工程中 // 2、初始化全局配置。加载一个配置文件。 String confUrl=this.getClass().getClassLoader().getResource("/fdfs_client.properties").getPath(); FastDFSClient fastDFSClient=new FastDFSClient(confUrl); //上传文件 String filePath= fastDFSClient.uploadFile("F:\\Photos\\P70602-192547.jpg"); System.out.println("返回路径:"+filePath); //省略其他
删除文件
1 2 3 //删除文件 int flag=fastDFSClient.delete_file("group1/M00/00/00/wKgrPFpf94KASn3vAAsC7gailiI018.jpg"); System.out.println("删除结果:" +(flag==0?"删除成功":"删除失败"));
下载文件到桌面
1 2 3 4 5 //下载文件到用户桌面位置 FileSystemView fsv = FileSystemView.getFileSystemView(); File com=fsv.getHomeDirectory(); //读取桌面路径 int downFlag=fastDFSClient.download_file("group1/M00/00/00/wKgrPFpe9OqAWsHxAAH5yvc2jn8251.jpg",new BufferedOutputStream(new FileOutputStream(com.getPath()+"\\aa.jpg"))); System.out.println("下载结果为:" +(downFlag==0?"下载文件成功":"下载文件失败"));
查询文件信息
1 2 3 //获取文件信息 FileInfo file=fastDFSClient.getFile("group1","M00/00/00/wKgrPFpe9OqAWsHxAAH5yvc2jn8251.jpg"); System.out.println("获取文件信息成功:"+file.getFileSize());
说明:在FastDFS工具类中集合了支持字节数组的上传入参。
Last updated: 2018-02-01 13:59:05