文档章节

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

abcijkxyz
 abcijkxyz
发布于 2016/07/08 16:31
字数 673
阅读 2
收藏 0
在阅读本文之前,请您先通过 《FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS》 一文中给出的参考博文中的部署篇和测试篇来完成前期的准备工作。


1、下载FastDFS的API
FastDFS提供Java和PHP等语言的客户端API。可以到FastDFS在Google Code的项目主页 http://code.google.com/p/fastdfs/downloads/list 下载。本文以Java API为例。


2、调用API的上传接口
通过Servlet得到InputStream、文件名称和文件长度,然后通过调用FastDFS提供的Java API把文件上传到FastDFS服务器。下段代码中的getFileBuffer可参考本博客上一篇博文。(by Poechant)
  1. /** 
  2.  * Upload File to DFS. 
  3.  * @param fileBuff, file to be uploaded. 
  4.  * @param uploadFileName, the name of the file. 
  5.  * @param fileLength, the length of the file. 
  6.  * @return the file ID in DFS. 
  7.  * @throws IOException  
  8.  */  
  9. public String uploadFile(InputStream inStream, String uploadFileName, long fileLength) throws IOException {  
  10.     byte[] fileBuff = getFileBuffer(inStream, fileLength);  
  11.     String fileId = "";  
  12.     String fileExtName = "";  
  13.     if (uploadFileName.contains(".")) {  
  14.         fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);  
  15.     } else {  
  16.         logger.warn("Fail to upload file, because the format of filename is illegal.");  
  17.         return fileId;  
  18.     }  
  19.   
  20.   
  21.     //建立连接  
  22.     TrackerClient tracker = new TrackerClient();  
  23.     TrackerServer trackerServer = tracker.getConnection();  
  24.     StorageServer storageServer = null;  
  25.     StorageClient1 client = new StorageClient1(trackerServer, storageServer);  
  26.   
  27.   
  28.     //设置元信息  
  29.     NameValuePair[] metaList = new NameValuePair[3];  
  30.     metaList[0] = new NameValuePair("fileName", uploadFileName);  
  31.     metaList[1] = new NameValuePair("fileExtName", fileExtName);  
  32.     metaList[2] = new NameValuePair("fileLength", String.valueOf(fileLength));  
  33.   
  34.   
  35.     //上传文件  
  36.     try {  
  37.         fileId = client.upload_file1(fileBuff, fileExtName, metaList);  
  38.     } catch (Exception e) {  
  39.         logger.warn("Upload file \"" + uploadFileName + "\"fails");  
  40.     }  
  41.     trackerServer.close();  
  42.     return fileId;  
  43. }  

3、调用方式详解
(1)客户端与Tracker Server通信
根据《FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS》一文中提供的FastDFS的工作原理,结合上面的代码,首先通过TrackerClient构造函数从全局配置中获取Tracker Servers的IP和端口初始化一个TrackerClient对象tracker,并与其建立连接,我们可以从API的源码中看到:
  1. /** 
  2. * constructor with global tracker group 
  3. */  
  4. public TrackerClient()  
  5. {  
  6.     this.tracker_group = ClientGlobal.g_tracker_group;  
  7. }     
  8. /** 
  9. * constructor with specified tracker group 
  10. * @param tracker_group the tracker group object 
  11. */  
  12. public TrackerClient(TrackerGroup tracker_group)  
  13. {  
  14.     this.tracker_group = tracker_group;  
  15. }  



上述代码中ClientGlobal是一个提供很多静态成员供外部读取的类。通过tracker这个TrackerClient建立的与Tracker Server的连接,实例化了一个trackerServer对象。


(2)客户端与Storage Server通信

通过trackerServer取得某一个可用的Storage Server的地址并用其实例化一个StorageClient1对象。这样就完成了FastDFS的客户端调用上传、下载、删除等所有操作的前期建立连接的工作。


(3)调用文件操作API
这些操作包括upload、download、append、delete等。上例中提供的是上传的实例。



本文来自 诗商·柳惊鸿 Poechant CSDN博客,转载请注明源地址:FastDFS的配置、部署与API使用解读(2)Java API:根据InputStream、文件名、文件长度上传文件

本文转载自:http://blog.csdn.net/yuwenruli/article/details/8469134

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
FastDFS的配置、部署与API使用解读 (1)

1、背景 FastDFS是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。该开源项目的主页是 http://code.google.com/p/fastdfs 。可以通过fastdfs...

吾爱
2012/12/04
0
0
用FastDFS一步步搭建文件管理系统

一、FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 个人封装的FastDFS Java API:https://github.com/...

JackFace
04/10
0
0
Centos 7 搭建 FastDFS文件管理系统

一、FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 个人封装的FastDFS Java API:https://github.com/...

欧虞山
09/05
0
0
Fastdfs分布式文件存储系统架构剖析及分布式集群环境的配置

===============分布式文件存储系统Fastdfs架构解析======================== FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能...

xiejunbo
2015/06/30
0
0
使用FastDFS搭建图片服务器(单实例)

FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地...

haoyuehong
09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash各类扩展详解

Bash各类扩展详解 Bash中主要包括大括号扩展、波浪号扩展、变量扩展、子命令扩展、文件名扩展和算数扩展。这些扩展组合在一起为Bash带来了极大的易用性。掌握这些扩展的用法和功能,能够为B...

小陶小陶
40分钟前
1
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
5
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
1
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
1
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部