安装成功了 。
3.Java 客户端调用安装成功后,接下来我们就用 Java 客户端来测试一下文件上传下载 。
首先我们来创建一个普通的 Maven 工程,添加如下依赖:
<dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27.0.0</version></dependency>然后,在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties,内容如下:
fastdfs.connect_timeout_in_seconds = 5fastdfs.network_timeout_in_seconds = 30fastdfs.charset = UTF-8fastdfs.http_anti_steal_token = falsefastdfs.http_secret_key = FastDFS1234567890fastdfs.http_tracker_http_port = 80fastdfs.tracker_servers = 192.168.91.128:22122fastdfs.connection_pool.enabled = truefastdfs.connection_pool.max_count_per_entry = 500fastdfs.connection_pool.max_idle_time = 3600fastdfs.connection_pool.max_wait_time_in_ms = 1000这里的配置基本上都能见名知义,我就不挨个解释了 。这里先配置下 fastdfs.tracker_servers,这是 Tracker 的地址,根据实际情况配置即可 。
fastdfs.http_secret_key 配置这里先不用管它,后面我会跟大家解释 。
3.1 文件上传配置完成后,先来看文件上传,代码如下:
@Testvoid testUpload() {try {ClientGlobal.initByProperties("fastdfs-client.properties");TrackerClient tracker = new TrackerClient();TrackerServer trackerServer = tracker.getConnection();StorageServer storageServer = null;StorageClient1 client = new StorageClient1(trackerServer, storageServer);NameValuePair nvp[] = null;//上传到文件系统String fileId = client.upload_file1("C:\Users\javaboy\Pictures\picpick\1.png", "png",nvp);logger.info(fileId);} catch (Exception e) {e.printStackTrace();}}这里,首先加载配置文件,然后构造一个 TrackerClient 对象,接着再根据这个对象获取到一个 TrackerServer,然后创建一个 StorageClient1 实例 。NameValuePair 中保存的是文件的元数据信息,如果有的话,就以 key/value 的方式来设置,如果没有的话,直接给一个 null 即可 。
最后,调用 client 的 upload_file1 方法上传文件,第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数就是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径 。执行该方法,打印日志如下:
2020-02-29 17:46:03.017INFO 6184 --- [main] o.j.fastdfs.FastdfsApplicationTests: group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png
group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就是文件的路径,此时,在浏览器中输入
http://192.168.91.128/group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就可以看到上传的图片了 。
3.2 文件下载@Testvoid testDownload() {try {ClientGlobal.initByProperties("fastdfs-client.properties");TrackerClient tracker = new TrackerClient();TrackerServer trackerServer = tracker.getConnection();StorageServer storageServer = null;StorageClient1 client = new StorageClient1(trackerServer, storageServer);byte[] bytes = client.download_file1("group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png");FileOutputStream fos = new FileOutputStream(new File("C:\Users\javaboy\Pictures\picpick\666.png"));fos.write(bytes);fos.close();} catch (Exception e) {e.printStackTrace();}}这段代码就很好理解了,直接调用 download_file1 方法获取到一个 byte 数组,然后通过 IO 流写出到本地文件即可 。
4.安全问题现在,任何人都可以访问我们服务器上传文件,这肯定是不行的,这个问题好解决,加一个上传时候的令牌即可 。
首先我们在服务端开启令牌校验:
vi /etc/fdfs/http.conf

文章插图
配置完成后,记得重启服务端:
./nginx -s stop./nginx接下来,在前端准备一个获取令牌的方法,如下:@Testpublic void getToken() throws Exception {int ts = (int) Instant.now().getEpochSecond();String token = ProtoCommon.getToken("M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png", ts, "FastDFS1234567890");StringBuilder sb = new StringBuilder();sb.append("?token=").append(token);sb.append("&ts=").append(ts);System.out.println(sb.toString());}这里,我们主要是根据 ProtoCommon.getToken 方法来获取令牌,注意这个方法的第一个参数是你要访问的文件 id,**注意,这个地址里边不包含 group,千万别搞错了;**第二个参数是时间戳,第三个参数是密钥,密钥要和服务端的配置一致 。将生成的字符串拼接,追加到访问路径后面,如:
http://192.168.91.128/group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png?token=
推荐阅读
- 微信小程序开发教程:WeUI一个专为微信小程序设计的UI框架
- 从零开始学习OpenWrt:刷机 + 使用 + 编译教程
- 血一般的教训,请慎用Insert Into Select
- CentOS7.9安装教程
- 春季煲汤注意三点 饮食专家教你怎么煲出好汤
- 春季护肤有妙招 专家教你春季护手新招
- 单反相机入门教程
- 教师|高薪自由职业者20%-40%的个税,如何核定后低至0.7%左右?
- 通过国学教育后对孩子的影响 国学教育中实施存在的问题,有哪些
- 乌鸡的做法 5款乌鸡食疗方做法教给你
